From 7e8f4859cd0129a2ec90e32ad94ad16d1f357ff6 Mon Sep 17 00:00:00 2001
From: admin
gemma4:e4b Q8_0 + nomic-embed-text"]
- OCR["PaddleOCR + PyThaiNLP"]
+ Ollama["Ollama Engine
np-dms-ai + np-dms-ocr"]
+ OCR["OCR Sidecar
Typhoon OCR + BGE-M3/Reranker"]
end
subgraph "Vector Database"
@@ -494,8 +500,8 @@ graph TB
| ----------------- | ------------------------- | ------------------------------------------------------- |
| **AI Gateway** | Backend (NestJS) | API endpoints, validation, audit logging |
| **BullMQ Queues** | Backend (NestJS) | ai-realtime (RAG/Suggest), ai-batch (OCR/Extract/Embed) |
-| **Ollama Engine** | Admin Desktop (Desk-5439) | gemma4:e4b Q8_0 (LLM) + nomic-embed-text (Embedding) |
-| **OCR Engine** | Admin Desktop (Desk-5439) | PaddleOCR + PyThaiNLP (Thai/English text extraction) |
+| **Ollama Engine** | Admin Desktop (Desk-5439) | `np-dms-ai` (main LLM) + `np-dms-ocr` (OCR model) |
+| **OCR Sidecar** | Admin Desktop (Desk-5439) | Typhoon OCR endpoint + BGE-M3 embed + BGE reranker |
| **Qdrant** | QNAP NAS | Vector storage with project isolation |
### 5.3 AI Architecture Rules
@@ -509,9 +515,18 @@ graph TB
### 5.4 2-Model Stack (ADR-023A)
-- **gemma4:e4b Q8_0** (~4.0GB VRAM) - Main LLM for classification, tagging, extraction
-- **nomic-embed-text** (~0.3GB VRAM) - Text embedding for RAG
-- **Total VRAM Peak:** ~4.3GB
+- **np-dms-ai** - Main LLM for classification, tagging, extraction, RAG answers
+- **np-dms-ocr** - OCR model through the sidecar, with adaptive residency from ADR-033
+- **BGE-M3 + BGE Reranker** - Retrieval stack served by the OCR sidecar
+
+---
+
+### 5.5 Parameter Governance (ADR-036)
+
+- **Production defaults:** `ai_execution_profiles`, keyed by `profile_name` and `canonical_model`
+- **Sandbox drafts:** `ai_sandbox_profiles`, seeded from production before admin testing
+- **Apply semantics:** draft → production UPSERT + Redis cache invalidation; affects new jobs only
+- **Snapshot semantics:** LLM params use `snapshotParams`; OCR quality params use `ocrSnapshotParams`; `keep_alive` remains lazy per ADR-033
---
@@ -539,6 +554,8 @@ graph TB
| **ADR-029** | Dynamic Prompt Management | ✅ Active | Prompt templates in DB (`ai_prompts`), Redis cache TTL 60s, versioned |
| **ADR-031** | Hermes Agent & Telegram Bridge | 📝 Draft | Optional DevOps Agent with Telegram commands, read-only diagnostics |
| **ADR-032** | Typhoon OCR Integration | 📝 Draft | Typhoon OCR-3B + typhoon2.1-gemma3-4b on Admin Desktop, VRAM monitoring, Redis caching |
+| **ADR-034** | AI Model Change | ✅ Active | Canonical model identities `np-dms-ai` and `np-dms-ocr` |
+| **ADR-036** | Unified OCR Architecture | 📝 Proposed | Sandbox-production parity for AI/OCR runtime parameters |
### 6.2 ADR References
@@ -565,6 +582,7 @@ For detailed architectural decisions, please refer to:
| Version | Date | Changes |
| --------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------- |
+| **1.9.9** | 2026-06-13 | Updated AI Architecture for ADR-036 sandbox-production parity and canonical `np-dms-ai`/`np-dms-ocr` model names |
| **1.9.7** | 2026-05-25 | Added ADR-029 Dynamic Prompt Management to ADR table; bumped version/date |
| **1.9.5** | 2026-05-22 | Added ADR-024/025/026/027/028 to ADR reference table; updated AI Architecture section heading; schema reference corrected to v1.9.0 |
| **1.9.2** | 2026-05-18 | Complete restructure following specs/02-Architecture format, added comprehensive diagrams, updated AI Architecture (ADR-023/023A) |
diff --git a/CONTEXT.md b/CONTEXT.md
index 62ac6752..1b18b088 100644
--- a/CONTEXT.md
+++ b/CONTEXT.md
@@ -231,23 +231,32 @@ _Avoid_: Throw exception from tool, Untyped error
| **Profile-Only Parameter Governance** | API caller ส่งได้เพียง `Execution Profile`; ค่า temperature, top_p, max tokens และ runtime parameters จริงถูกกำหนดโดย backend policy เท่านั้น | Caller parameter override, free-form runtime tuning |
| **Integrated Retrieval Acceleration Policy** | การเร่งความเร็ว retrieval เช่น BGE embedding/reranking บน GPU เป็นส่วนหนึ่งของ AI runtime resource policy เดียวกับ main model และ OCR ไม่ใช่งาน optimization แยกอิสระ | Standalone retrieval tuning, separate GPU policy for RAG only |
+## Glossary Updates (from ADR-036)
+
+| Term | Definition | Avoid |
+| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
+| **Apply to Production** | การกระทำของ admin ที่ copy ค่าจาก **Sandbox Draft Profile** (`ai_sandbox_profiles`) ทับ production row ใน `ai_execution_profiles` (UPSERT + invalidate Redis); systemPrompt → activate version ใน `ai_prompts`; มีผลกับงานที่ submit **หลังจากนั้น** เท่านั้น | new system_settings param store, lazy-read at process time |
+| **Sandbox Draft Profile** | ค่า runtime params ที่ admin ปรับ/ทดสอบ — เก็บแยก persisted ใน `ai_sandbox_profiles` (mirror `ai_execution_profiles` + `profile_name` + `canonical_model`); **seed ค่าตั้งต้นจาก production row** เมื่อยังไม่มี draft หรือกด reset; production **ไม่เห็น** draft จนกว่าจะกด Apply to Production | ephemeral override, draft ใน production table, implicit production write |
+| **Production Pipeline Sandbox** | เครื่องมือ admin ที่รัน **เส้นทางประมวลผลเดียวกับ production** (`processMigrateDocument`): OCR → Active Prompt → Master Data context → LLM extraction — ต่างแค่ **ไม่ commit ลง DB**; เพื่อ parity จริงต้องดึง runtime params จาก `ai_execution_profiles` row เดียวกับ production (ห้าม hardcode `num_ctx`/`num_predict`) | OCR Sandbox (สื่อแคบ), OCR test tool, OCR-only sandbox |
+| **Tunable Production Defaults** | ค่า runtime params ที่ admin ปรับได้และ production ดึงไปใช้ = row ใน `ai_execution_profiles` (รวม row `ocr-extract` สำหรับ `np-dms-ocr`) ไม่ใช่ store แยก | OCR*PRODUCTION_DEFAULTS key, AI_MODEL*\*\_DEFAULTS system_settings |
+
---
## System readiness summary (resolved)
-| Component | สถานะ | หมายเหตุ |
-| :---------------------------- | :------- | :---------------------------------------------------------------------------------------------- |
-| **Infrastructure** | ✅ พร้อม | NestJS + Next.js + MariaDB + Redis + Elasticsearch |
-| **Workflow Engine** | ✅ พร้อม | DSL-based, ADR-001/021 |
-| **AI Boundary** | ✅ พร้อม | ADR-023A — Ollama isolation, no direct DB access |
-| **RAG Pipeline** | ✅ พร้อม | Qdrant service ป้องกันการรั่วไหลระหว่างโปรเจกต์ |
-| **Intent Router** | ✅ พร้อม | ADR-024 Active — Intent Classifier (Pattern→LLM Fallback) ทำงานเสร็จสมบูรณ์ |
-| **AI Tool Layer** | ✅ พร้อม | ADR-025 Active — Tool Layer Bridge functions พัฒนาเสร็จสมบูรณ์ |
-| **Document Chat UI** | ✅ พร้อม | ADR-026 Active — แผงควบคุม Side-panel Chat UI พัฒนาเสร็จสมบูรณ์ |
-| **AI Admin Console** | ✅ พร้อม | ADR-027 Active — แผงควบคุม Dynamic prompt & model control |
-| **Dynamic Prompt Mgmt** | ✅ พร้อม | ADR-029 Active — พัฒนาเสร็จสมบูรณ์ทั้ง Entity, API, Sandbox, Cache และ UI |
-| **Active Model & OCR Switch** | ✅ พร้อม | ADR-033 Active — สลับโมเดลแบบ Synchronous, GPU VRAM Auto-release และ API Key sidecar protection |
-| **AI Runtime Policy Refactor**| ✅ พร้อม | Feature-235 — `np-dms-ai`/`np-dms-ocr` canonical names, adaptive OCR residency, CPU fallback retrieval, queue policy (ai-realtime concurrency=2) |
+| Component | สถานะ | หมายเหตุ |
+| :----------------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------- |
+| **Infrastructure** | ✅ พร้อม | NestJS + Next.js + MariaDB + Redis + Elasticsearch |
+| **Workflow Engine** | ✅ พร้อม | DSL-based, ADR-001/021 |
+| **AI Boundary** | ✅ พร้อม | ADR-023A — Ollama isolation, no direct DB access |
+| **RAG Pipeline** | ✅ พร้อม | Qdrant service ป้องกันการรั่วไหลระหว่างโปรเจกต์ |
+| **Intent Router** | ✅ พร้อม | ADR-024 Active — Intent Classifier (Pattern→LLM Fallback) ทำงานเสร็จสมบูรณ์ |
+| **AI Tool Layer** | ✅ พร้อม | ADR-025 Active — Tool Layer Bridge functions พัฒนาเสร็จสมบูรณ์ |
+| **Document Chat UI** | ✅ พร้อม | ADR-026 Active — แผงควบคุม Side-panel Chat UI พัฒนาเสร็จสมบูรณ์ |
+| **AI Admin Console** | ✅ พร้อม | ADR-027 Active — แผงควบคุม Dynamic prompt & model control |
+| **Dynamic Prompt Mgmt** | ✅ พร้อม | ADR-029 Active — พัฒนาเสร็จสมบูรณ์ทั้ง Entity, API, Sandbox, Cache และ UI |
+| **Active Model & OCR Switch** | ✅ พร้อม | ADR-033 Active — สลับโมเดลแบบ Synchronous, GPU VRAM Auto-release และ API Key sidecar protection |
+| **AI Runtime Policy Refactor** | ✅ พร้อม | Feature-235 — `np-dms-ai`/`np-dms-ocr` canonical names, adaptive OCR residency, CPU fallback retrieval, queue policy (ai-realtime concurrency=2) |
## Flagged ambiguities
@@ -275,19 +284,33 @@ _Avoid_: Throw exception from tool, Untyped error
- **"`np-dms-ocr` ควรเดินตาม naming policy เดียวกันไหม"** — resolved: ใช้ **Canonical OCR Identity**; `np-dms-ocr` เป็นชื่อ canonical เดียวทุกชั้นเหมือน `np-dms-ai`
- **"`temperature/topP/maxTokens` ใครคุม"** — resolved: ใช้ **Profile-Only Parameter Governance**; caller ส่งได้แค่ profile ส่วน runtime parameters จริงให้ backend policy คุมทั้งหมด
- **"BGE GPU uplift อยู่ใน scope เดียวกันไหม"** — resolved: ใช้ **Integrated Retrieval Acceleration Policy**; retrieval acceleration เป็นส่วนหนึ่งของ runtime resource policy เดียวกัน
+- **"ADR-036 system_settings store ใหม่"** — resolved: **ไม่สร้าง** parallel param store ใน `system_settings`; `ai_execution_profiles` คือ setting store เดิมที่ production ดึงค่าอยู่แล้ว (`getProfileParameters()`) — ADR-036 เป็น **enhance** (เติม write/apply path) ไม่ใช่ supersede Profile-Only Parameter Governance
+- **"ADR-036 systemPrompt เก็บที่ไหน"** — resolved: systemPrompt อยู่ใน `ai_prompts` (**Active Prompt**, ADR-029, versioned, มี `{{ocr_text}}`) เท่านั้น — ห้ามเก็บใน `ai_execution_profiles` หรือ `system_settings`
+- **"ADR-036 OCR tunability"** — resolved: OCR tunable params = **`temperature`/`top_p`/`repeat_penalty`** เท่านั้น (ตรงกับ `OcrTyphoonOptions`) เก็บเป็น row `ocr-extract` ใน `ai_execution_profiles` พร้อมเพิ่ม column `canonical_model`; `num_ctx`/`max_tokens` nullable (OCR ไม่ใช้); **`keep_alive` ไม่ tunable** — ใช้ Adaptive OCR Residency (ADR-033) ดู Gap 2
+- **"ADR-036 read semantics (Apply to Production)"** — resolved: คง **Snapshot semantics** — params ถูกแช่แข็งลง job payload ณ เวลา dispatch (`createJobPayload()`); ค่าที่ admin apply มีผลกับงานใหม่เท่านั้น ไม่แทรกงานที่ค้างคิว (รักษา reproducibility + audit `snapshot_params_json`)
+- **"sandbox draft params เก็บที่ไหน / Apply ทำอะไร"** — resolved: ใช้ **2-layer draft→production** — draft persisted ใน **`ai_sandbox_profiles`** (admin iterate ได้ ไม่กระทบ production); **Apply** = UPSERT draft ทับ row ใน `ai_execution_profiles` + DEL redis cache. production อ่านเฉพาะ `ai_execution_profiles` (ไม่เห็น draft); sandbox pipeline อ่าน draft จาก `ai_sandbox_profiles`
+- **"draft ตั้งต้นมาจากไหน"** — resolved: draft ต้อง **seed จาก production row** (`ai_execution_profiles`) เมื่อยังไม่มี draft หรือเมื่อ admin กด "Reset to Production" — `getSandboxParameters()` ถ้าไม่พบ draft ให้ clone จาก production row แล้ว return (ไม่ fallback ไป hardcoded ก่อน); ทำให้ admin เริ่มจากค่า production จริงแล้วปรับ delta
+- **"OCR params ไปถึง production OCR step อย่างไร (Gap 1)"** — resolved: production `OcrService.processWithTyphoon` ปัจจุบันส่ง sidecar แค่ `engine`+`keep_alive` → ต้อง wire ให้ส่ง `temperature/topP/repeatPenalty` ด้วย (sidecar `/ocr-upload` รับ field พวกนี้อยู่แล้ว `app.py:265-273`); เพิ่ม `typhoonOptions?: OcrTyphoonOptions` ใน `OcrDetectionInput` แล้ว `processMigrateDocument` ส่ง `job.data.ocrSnapshotParams`
+- **"keep_alive tunable หรือ adaptive (Gap 2)"** — resolved: ใช้กฎ **quality params freeze / resource params lazy** — temperature/top_p/repeat/num_ctx/max_tokens แช่แข็ง ณ dispatch; **keep_alive มาจาก `calculateOcrResidency()` (Adaptive OCR Residency, ADR-033) ณ process time** ไม่อยู่ใน OCR tunable set (สอดคล้อง `OcrTyphoonOptions` ที่ไม่มี keep_alive)
+- **"dual-model job snapshot กี่ชุด (Gap 3)"** — resolved: `migrate-document`/`auto-fill-document` ใช้ 2 model (OCR+LLM) → `AiJobPayload` คง `snapshotParams` (LLM, backward-compat) + เพิ่ม **`ocrSnapshotParams?: OcrTyphoonOptions`**; populate เมื่อ pipeline รัน OCR; audit row เดียว `{ ...llm, ocr }`
+- **"ocr-extract เป็น ExecutionProfile ไหม (Gap 4)"** — resolved: **ไม่** — `ocr-extract` เป็น **model-defaults row** (key ด้วย `canonical_model`/`profile_name`) ไม่ใช่สมาชิก `ExecutionProfile` union (คง Canonical Profile Set 4 ตัว); ใช้ accessor `getModelDefaults('np-dms-ocr')` แยกจาก `getProfileParameters(profile)`
+- **"OCR Sandbox คืออะไร"** — resolved: **Production Pipeline Sandbox** — `processSandboxExtract`/`processSandboxAiExtract` รันเส้นเดียวกับ `processMigrateDocument` (OCR → Active Prompt → Master Data → LLM) ต่างแค่ไม่ commit DB; ปัจจุบันมี **parity gap** — sandbox hardcode `{ num_ctx: 16384, num_predict: 4096 }` ส่วน production ใช้ `snapshotParams` จาก profile → ADR-036 ต้องให้ sandbox เลิก hardcode แล้วดึง params จาก **`ai_sandbox_profiles`** (Sandbox Draft Profile, schema เดียวกับ `ai_execution_profiles`) เพื่อให้ admin เห็นผลของค่าที่กำลังปรับก่อนกด Apply; หลัง Apply draft จะเท่ากับ production row
+- **"Master Data context parity (Gap 5)"** — resolved: Sandbox (`processSandboxExtract`/`processSandboxAiExtract`) ปัจจุบัน skip master data context ถ้า `projectPublicId='default'` → ทำให้ prompt content ต่างจาก production. Sandbox UI ต้องให้ admin ระบุ `projectPublicId` (และ `contractPublicId`) จริง; `aiPromptsService.resolveContext` ต้องถูกเรียกด้วย ID จริงเสมอ (ไม่ใช้ `'default'` เพื่อ skip); `aiPromptsService` จะคืนค่า empty context ถ้า project/contract ไม่มี master data
+- **"Apply Guardrails (Gap 6)"** — resolved: Apply to Production เป็น critical config change → ต้องมี guardrails ตาม AGENTS.md: (1) **Idempotency-Key** header mandatory สำหรับ `POST /api/ai/profiles/:profileName/apply` (Redis dedupe 5 นาที); (2) **CASL Guard** `@UseGuards(CaslGuard)` + permission `system.manage_ai`; (3) **Param Validation** class-validator (`@Min(0) @Max(1)` สำหรับ temperature/topP); (4) **Audit Trail** `ai_audit_logs` บันทึก `action='APPLY_PROFILE'`, user, old→new values; (5) **Range Guard** service layer throw `BusinessException` ถ้า out of range
+- **"Entity/Service canonicalModel mapping (Gap 7)"** — resolved: `AiExecutionProfileEntity` ไม่มี mapping `canonical_model` column; `getProfileParameters` (`:125`) hardcode `canonicalModel: 'np-dms-ai'` → ต้องเพิ่ม `@Column({ name: 'canonical_model' })` ใน Entity; แก้ `getProfileParameters` อ่านจาก column แทน hardcode; สร้าง accessor `getModelDefaults(canonicalModel)` สำหรับ query ตาม canonical_model โดยตรง
## ADRs ที่เกี่ยวข้องกับ AI Runtime Layer
-| ADR | หัวข้อ | ตัดสินใจอะไร | สถานะ |
-| :------ | :--------------------------------- | :-------------------------------------------------------------------------- | :---------- |
-| ADR-024 | Intent Classification Strategy | Hybrid: Pattern First → LLM Fallback | ✅ Accepted |
-| ADR-025 | AI Tool Layer Architecture | Bridge pattern, CASL enforcement, response shape | ✅ Accepted |
-| ADR-026 | Document Chat UI Pattern | Side-panel vs modal vs separate page | ✅ Accepted |
-| ADR-027 | AI Admin Console & Dynamic Control | Admin Panel + dynamic model/prompt/intent control | ✅ Accepted |
-| ADR-028 | Migration Architecture Refactor | Staging Queue & post-migration cleanup | ✅ Active |
-| ADR-029 | Dynamic Prompt Management | `ai_prompts` table, versioned OCR extraction prompt | ✅ Active |
-| ADR-032 | Typhoon OCR Integration | Typhoon OCR-3B + typhoon2.1-gemma3-4b on Admin Desktop | ✅ Active |
-| ADR-033 | Active Model & OCR Management | Synchronous Model switch, GPU VRAM Auto-release, Sidecar API Key protection | ✅ Active |
+| ADR | หัวข้อ | ตัดสินใจอะไร | สถานะ |
+| :------ | :--------------------------------- | :------------------------------------------------------------------------------ | :---------- |
+| ADR-024 | Intent Classification Strategy | Hybrid: Pattern First → LLM Fallback | ✅ Accepted |
+| ADR-025 | AI Tool Layer Architecture | Bridge pattern, CASL enforcement, response shape | ✅ Accepted |
+| ADR-026 | Document Chat UI Pattern | Side-panel vs modal vs separate page | ✅ Accepted |
+| ADR-027 | AI Admin Console & Dynamic Control | Admin Panel + dynamic model/prompt/intent control | ✅ Accepted |
+| ADR-028 | Migration Architecture Refactor | Staging Queue & post-migration cleanup | ✅ Active |
+| ADR-029 | Dynamic Prompt Management | `ai_prompts` table, versioned OCR extraction prompt | ✅ Active |
+| ADR-032 | Typhoon OCR Integration | Typhoon OCR-3B + typhoon2.1-gemma3-4b on Admin Desktop | ✅ Active |
+| ADR-033 | Active Model & OCR Management | Synchronous Model switch, GPU VRAM Auto-release, Sidecar API Key protection | ✅ Active |
| ADR-034 | Thai Model Stack | typhoon2.5-np-dms:latest (Main) + typhoon-np-dms-ocr:latest (OCR, keep_alive:0) | ✅ Active |
**หมายเหตุ**: ADR-023A ยังคงเป็น canonical สำหรับ infrastructure — ADR-024/025/026/027 เพิ่ม runtime layer; ADR-028 ปรับ Migration Pipeline; ADR-033 จัดระบบโมเดลและ OCR
diff --git a/backend/src/.understand-anything/.understandignore b/backend/src/.understand-anything/.understandignore
new file mode 100644
index 00000000..333e4df9
--- /dev/null
+++ b/backend/src/.understand-anything/.understandignore
@@ -0,0 +1,13 @@
+# ยกเว้นไฟล์ทดสอบและ specs
+*.spec.ts
+*.test.ts
+*.spec.js
+*.test.js
+__tests__/
+tests/
+test/
+
+# ยกเว้นแคชและไฟล์ชั่วคราว
+.jest-cache/
+tmp/
+temp/
diff --git a/backend/src/.understand-anything/knowledge-graph.json b/backend/src/.understand-anything/knowledge-graph.json
new file mode 100644
index 00000000..3a87001b
--- /dev/null
+++ b/backend/src/.understand-anything/knowledge-graph.json
@@ -0,0 +1,18879 @@
+{
+ "version": "1.0.0",
+ "project": {
+ "name": "lcbp3-backend",
+ "languages": [
+ "typescript",
+ "markdown",
+ "json"
+ ],
+ "frameworks": [
+ "nestjs"
+ ],
+ "description": "NestJS backend for LCBP3 project",
+ "analyzedAt": "2026-06-13T13:05:08.718Z",
+ "gitCommitHash": "190b9a3af5f505e9ec59ba8d447c4720b2cb7dae"
+ },
+ "nodes": [
+ {
+ "id": "file:app.module.ts",
+ "type": "file",
+ "name": "app.module.ts",
+ "filePath": "app.module.ts",
+ "summary": "โมดูลหลักของแอปพลิเคชันที่กำหนดโครงสร้างและบริการต่าง ๆ ให้กับระบบ โดยมีบทบาทสำคัญในการเชื่อมโยงส่วนประกอบต่าง ๆ เข้าด้วยกัน",
+ "tags": [
+ "module",
+ "app-config"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:app.service.ts",
+ "type": "file",
+ "name": "app.service.ts",
+ "filePath": "/src/app.service.ts",
+ "summary": "คลาส AppService มีเมธอด getHello เพื่อให้คืนค่าข้อความยินดีต้อนรับ โดยมีขนาดเล็กและเรียบง่าย ใช้งานเพื่อจัดการตรรกะหลักของระบบได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "service",
+ "app-service"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/config/env.validation.ts",
+ "type": "file",
+ "name": "env.validation.ts",
+ "filePath": "common/config/env.validation.ts",
+ "summary": "ไฟล์โค้ดระบบ env.validation.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/config/redis.config.ts",
+ "type": "file",
+ "name": "redis.config.ts",
+ "filePath": "common/config/redis.config.ts",
+ "summary": "ไฟล์โค้ดระบบ redis.config.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/decorators/bypass-maintenance.decorator.ts",
+ "type": "file",
+ "name": "bypass-maintenance.decorator.ts",
+ "filePath": "common/decorators/bypass-maintenance.decorator.ts",
+ "summary": "ดีคัปเตอร์ที่ใช้ช่วยให้ endpoint บางตัวสามารถทำงานได้แม้มีโหมดการบำรุงรักษาเปิดอยู่ โดยกำหนดเงื่อนไขเฉพาะเจาะจงเพื่อหลีกเลี่ยงผลกระทบจากโหมดนี้",
+ "tags": [
+ "decorator",
+ "middleware"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/entities/base.entity.ts",
+ "type": "file",
+ "name": "base.entity.ts",
+ "filePath": "common/entities/base.entity.ts",
+ "summary": "ไฟล์นี้เป็นฐานรากของทุก Entity ในระบบ โดยมีการกำหนดโครงสร้างพื้นฐาน เช่น createdAt, updatedAt และเมธอดช่วยเหลืออื่น ๆ ใช้งานร่วมกับ TagEntity เพื่อลดความซ้ำซ้อน",
+ "tags": [
+ "base-entity",
+ "shared-structure"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/guards/maintenance-mode.guard.ts",
+ "type": "file",
+ "name": "maintenance-mode.guard.ts",
+ "filePath": "common/guards/maintenance-mode.guard.ts",
+ "summary": "คือการป้องกันไม่ให้ผู้ใช้งานเข้าถึงระบบเมื่อมีการเปิดโหมดบำรุงรักษา โดยตรวจสอบสถานะของระบบและยืนยันว่าสามารถดำเนินการได้หรือไม่ หากอยู่ในโหมดบำรุงรักษาจะปฏิเสธคำขอเข้าสู่ระบบ",
+ "tags": [
+ "guard",
+ "maintenance-mode",
+ "security"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/interceptors/idempotency.interceptor.ts",
+ "type": "file",
+ "name": "idempotency.interceptor.ts",
+ "filePath": "common/interceptors/idempot-ency.interceptor.ts",
+ "summary": "ตัวกรอง (Interceptor) สำหรับการป้องกันการทำซ้ำคำขอ โดยใช้ระบบที่เก็บค่า idempotent key เพื่อตรวจสอบว่าคำขอเดิมเคยถูกประมวลผลแล้วหรือไม่ หากพบว่าเคยทำไปแล้วจะปฏิเสธคำขอใหม่เพื่อลดความผิดพลาดจาก request ซ้ำ",
+ "tags": [
+ "interceptor",
+ "idempotency",
+ "cache-response"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/interceptors/performance.interceptor.ts",
+ "type": "file",
+ "name": "performance.interceptor.ts",
+ "filePath": "common/interceptors/performance.interceptor.ts",
+ "summary": "คลาส PerformanceInterceptor ใช้ติดตามประสิทธิภาพของ API request โดยจัดเก็บข้อมูลเวลาเริ่มต้นและสิ้นสุดการประมวลผล เพื่อวิเคราะห์ความเร็วในการตอบสนองของระบบ",
+ "tags": [
+ "interceptor",
+ "performance-monitoring",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/resilience/resilience.module.ts",
+ "type": "file",
+ "name": "resilience.module.ts",
+ "filePath": "common/resilience/resility.module.ts",
+ "summary": "โมดูลนี้กำหนดโครงสร้างการทำงานของระบบความทนทาน (Resilience) โดยมีการประกาศคลาส ResilienceModule ซึ่งใช้ในการจัดการพฤติกรรมของแอปพลิเคชันเมื่อเกิดข้อผิดพลาด เช่น การล่มหรือตอบสนองไม่ทันเวลา",
+ "tags": [
+ "module",
+ "resilience",
+ "nestjs"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:main.ts",
+ "type": "file",
+ "name": "main.ts",
+ "filePath": "main.ts",
+ "summary": "ไฟล์หลักของโปรเจกต์ที่รับผิดชอบในการเริ่มต้นการทำงานของแอปพลิเคชัน โดยใช้ฟังก์ชัน bootstrap เพื่อโหลดโมดูลหลักและเริ่มให้งานอยู่",
+ "tags": [
+ "main",
+ "bootstrap",
+ "entry-point"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/auth/entities/role.entity.ts",
+ "type": "file",
+ "name": "role.entity.ts",
+ "filePath": "modules/auth/entities/role.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของ Entity สำหรับ Role และ Permission โดยใช้ BaseEntity จาก common/entities/base.entity.ts เพื่อให้มีฟิลด์ที่จำเป็น เช่น createdAt, updatedAt เหมือนกันในระบบบริหารจัดการสิทธิ์",
+ "tags": [
+ "entity",
+ "role-management",
+ "permission-model"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/monitoring/controllers/health.controller.ts",
+ "type": "file",
+ "name": "health.controller.ts",
+ "filePath": "modules/monitoring/controllers/health.controller.ts",
+ "summary": "คลาส HealthController ใช้จัดการ endpoint เพื่อตรวจสอบสถานะระบบ เช่น การตอบสนองต่อคำขอ ping และ check โดยมีเมธอด constructor, ping และ check เก็บไว้ภายในไฟล์นี้เพื่อให้ง่ายต่อการนำเข้าและใช้งานในบริบทของ monitoring",
+ "tags": [
+ "controller",
+ "health-check",
+ "monitoring"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/monitoring/dto/set-maintenance.dto.ts",
+ "type": "file",
+ "name": "set-maintenance.dto.ts",
+ "filePath": "modules/monitoring/dto/set-maintenance.dto.ts",
+ "summary": "ดิทโต (DTO) สำหรับรับข้อมูลการตั้งโหมดบำรุงรักษา โดยมีฟิลด์ชื่อและค่าเวลาเริ่ม-สิ้นสุด",
+ "tags": [
+ "dto",
+ "maintenance-mode"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/monitoring/logger/winston.config.ts",
+ "type": "file",
+ "name": "winston.config.ts",
+ "filePath": "modules/monitoring/logger/winston.config.ts",
+ "summary": "ไฟล์โค้ดระบบ winston.config.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/monitoring/monitoring.controller.ts",
+ "type": "file",
+ "name": "monitoring.controller.ts",
+ "filePath": "modules/monitoring/monitoring.controller.ts",
+ "summary": "คลาส MonitoringController ใช้จัดการ endpoint เพื่อตรวจสอบสถานะการบำรุงรักษาและควบคุมโหมดการบำรุงรักษาของระบบ โดยมีเมธอดหลักได้แก่ getMaintenanceStatus และ setMaintenanceMode เก็บข้อมูลผ่าน DTO และเชื่อมโยงไปยังบริการหลัก (service) เพื่อประมวลผลงานต่าง ๆ",
+ "tags": [
+ "controller",
+ "monitoring",
+ "maintenance-mode"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/decorators/require-permission.decorator.ts",
+ "type": "file",
+ "name": "require-permission.decorator.ts",
+ "filePath": "common/decorators/require-permission.decorator.ts",
+ "summary": "Decorator ที่ตรวจสอบสิทธิ์การเข้าถึง API โดยใช้ RBAC (Role-Based Access Control) เพื่อจำกัดการเรียกใช้งานตามบทบาทของผู้ใช้งาน",
+ "tags": [
+ "decorator",
+ "rbac"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/guards/jwt-auth.guard.ts",
+ "type": "file",
+ "name": "jwt-auth.guard.ts",
+ "filePath": "common/guards/jwt-auth.guard.ts",
+ "summary": "Guard ที่ตรวจสอบความถูกต้องของ JWT token เพื่อยืนยันว่าผู้ใช้งานได้เข้าสู่ระบบแล้วหรือไม่ก่อนจะให้เข้าถึง endpoint",
+ "tags": [
+ "guard",
+ "authentication"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "file",
+ "name": "parse-uuid.pipe.ts",
+ "filePath": "common/pipes/parse-uuid.pipe.ts",
+ "summary": "Pipe ที่ใช้แปลงค่า string เป็น UUID โดยอัตโนมัติเมื่อรับข้อมูลเข้ามาใน request body เช่น ID ของผู้ใช้งานหรือบทบาท",
+ "tags": [
+ "pipe",
+ "validation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/guards/rbac.guard.ts",
+ "type": "file",
+ "name": "rbac.guard.ts",
+ "filePath": "common/guards/rbac.guard.ts",
+ "summary": "Guard ที่ตรวจสอบบทบาท (roles) ของผู้ใช้งานเพื่อให้มั่นใจว่าผู้ใช้สามารถเข้าถึง endpoint ตามสิทธิ์ได้อย่างเหมาะสม",
+ "tags": [
+ "guard",
+ "rbac"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/interfaces/request-with-user.interface.ts",
+ "type": "file",
+ "filePath": "common/interfaces/request-with-user.interface.ts",
+ "name": "request-with-user.interface.ts",
+ "summary": "อินเตอร์เฟซที่ใช้กำหนดโครงสร้างของ Request ที่มีการระบุผู้ใช้งาน (user) โดยเฉพาะอย่างยิ่งเพื่อให้สามารถเข้าถึงข้อมูลผู้ใช้งานได้ใน middleware และ controller",
+ "tags": [
+ "request-interface",
+ "auth-context"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/services/uuid-resolver.service.ts",
+ "type": "file",
+ "name": "uuid-resolver.service.ts",
+ "filePath": "common/services/uuid-resolver.service.ts",
+ "summary": "บริการช่วยสร้างหรือแก้ไข UUID สำหรับข้อมูลต่าง ๆ ในระบบ โดยใช้งานร่วมกับโมดูลอื่นๆ เพื่อรักษาความสมบูรณ์ของระบบที่เกี่ยวข้อง",
+ "tags": [
+ "uuid",
+ "service"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:src/app.controller.ts",
+ "type": "file",
+ "name": "app.controller.ts",
+ "filePath": "src/app.controller.ts",
+ "summary": "คลาส AppController มีหน้าที่จัดการ endpoint หลักของระบบ โดยมีเมธอด getHello เพื่อตอบสนองคำขอสำหรับข้อมูลยินดีต้อนรับ และใช้บริการจาก app.service.ts",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:src/app.service.ts",
+ "type": "file",
+ "name": "app.service.ts",
+ "filePath": "src/app.service.ts",
+ "summary": "บริการ AppService ให้หน้าที่รองรับการทำงานหลักของระบบ เช่น การจัดเก็บข้อมูลหรือประมวลผลข้อมูลเบื้องต้น โดยถูกเรียกใช้งานโดย AppController",
+ "tags": [
+ "service",
+ "utility"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/monitoring/services/metrics.service.ts",
+ "type": "file",
+ "name": "metrics.service.ts",
+ "filePath": "modules/monitors/services/metrics.service.ts",
+ "summary": "คลาส MetricsService มีหน้าที่จัดการกับข้อมูลเมตริกต่าง ๆ เช่น การเก็บข้อมูลประสิทธิภาพระบบ หรือสถิติการทำงานของบริการต่างๆ โดยมี constructor เพียงอย่างเดียว และเป็นไฟล์ที่ส่งออกคลาสนี้ไปใช้งานในโมดูลอื่น ๆ",
+ "tags": [
+ "metrics-service",
+ "monitoring"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/monitoring/monitoring.service.ts",
+ "type": "file",
+ "name": "monitoring.service.ts",
+ "filePath": "modules/monitors/monitoring.service.ts",
+ "summary": "คลาส MonitoringService ใช้จัดการสถานะการทำงานของระบบ โดยมีเมธอดสำหรับดึงข้อมูลสถานะบำรุงรักษา (getMaintenanceStatus) และตั้งโหมดบำรุงรักษาระหว่างช่วงเวลาหนึ่ง (setMaintenanceMode)",
+ "tags": [
+ "service",
+ "monitoring",
+ "maintenance-mode"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/monitoring/monitoring.module.ts",
+ "type": "file",
+ "name": "monitoring.module.ts",
+ "filePath": "modules/monitoring/monitoring.module.ts",
+ "summary": "โมดูลนี้กำหนดโครงสร้างการทำงานของระบบ monitoring โดยใช้ MonitoringModule ซึ่งเป็นคลาสหลักในการจัดการบริการต่าง ๆ เช่น การตรวจสอบสถานะ (health check) และการเก็บข้อมูลเมตริก",
+ "tags": [
+ "module",
+ "monitoring",
+ "controller",
+ "service"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/organization/dto/create-organization.dto.ts",
+ "type": "file",
+ "name": "create-organization.dto.ts",
+ "filePath": "modules/organization/dto/create-organization.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการสร้างองค์กร โดยกำหนดโครงสร้างของฟอร์มที่ใช้ในการเพิ่มข้อมูล organization เน้นความถูกต้องและครบถ้วนของข้อมูลที่ส่งเข้ามา",
+ "tags": [
+ "dto",
+ "create-organization"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/organization/dto/search-organization.dto.ts",
+ "type": "file",
+ "name": "search-organization.dto.ts",
+ "filePath": "modules/organization/dto/search-organization.dto.ts",
+ "summary": "DTO สำหรับการค้นหาองค์กร โดยกำหนดรูปแบบของพารามิเตอร์ที่ใช้ในการกรองข้อมูล เช่น เงื่อนไขค้นหาตามชื่อหรือรหัสองค์กร",
+ "tags": [
+ "dto",
+ "query-filter"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/organization/dto/update-organization.dto.ts",
+ "type": "file",
+ "name": "update-organization.dto.ts",
+ "filePath": "modules/organization/dto/update-organization.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการอัปเดตองค์กร โดยระบุฟิลด์ที่สามารถแก้ไขได้และตรวจสอบความถูกต้องของข้อมูลก่อนจะบันทึกลงฐานข้อมูล",
+ "tags": [
+ "dto",
+ "input-validation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/organization/entities/organization-role.entity.ts",
+ "type": "file",
+ "name": "organization-role.entity.ts",
+ "filePath": "modules/organization/entities/organization-role.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของบทบาทองค์กร (Organization Role) ซึ่งใช้ในการจัดการสิทธิ์และหน้าที่ภายในระบบ",
+ "tags": [
+ "entity",
+ "role-management"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/organization/organization.controller.ts",
+ "type": "file",
+ "name": "organization.controller.ts",
+ "filePath": "modules/organization/organization.controller.ts",
+ "summary": "ควบคุมการรับส่งข้อมูลผ่าน API โดยจัดการ endpoint สำหรับ CRUD operations เกี่ยวกับองค์กร เช่น การสร้าง, อัปเดต, และดึงข้อมูลองค์กร",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/organization/organization.service.ts",
+ "type": "file",
+ "name": "organization.service.ts",
+ "filePath": "modules/organization/organization.service.ts",
+ "summary": "ส่วนประกอบของระบบ organization.service.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/organization/organization.module.ts",
+ "type": "file",
+ "filePath": "modules/organization/organization.module.ts",
+ "name": "organization.module.ts",
+ "summary": "โมดูลสำหรับจัดการองค์กร โดยมีโครงสร้างพื้นฐานรองรับการทำงานของโปรเจกต์ที่เกี่ยวข้องกับ organization",
+ "tags": [
+ "module",
+ "organization"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/organization/entities/organization.entity.ts",
+ "type": "file",
+ "name": "organization.entity.ts",
+ "filePath": "modules/organization/entities/organization.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลองค์กร เช่น ชื่อ-รหัสองค์กร โดยใช้ในบริการ format.service เพื่อแทนที่โค้ดองค์กร (org code) ในเลขที่เอกสาร",
+ "tags": [
+ "entity",
+ "organization"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/iversity/dto/update-organization.dto.ts",
+ "type": "file",
+ "name": "update-organization.dto.ts",
+ "filePath": "modules/organization/dto/update-organization.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการอัปเดตองค์กร โดยกำหนดโครงสร้างของฟอร์มที่ใช้ในการแก้ไขข้อมูล organization เน้นความถูกต้องและครบถ้วนของข้อมูลที่ส่งเข้ามา",
+ "tags": [
+ "dto",
+ "update-organization"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/tags/dto/create-tag.dto.ts",
+ "type": "file",
+ "name": "create-tag.dto.ts",
+ "filePath": "modules/tags/dto/create-tag.dto.ts",
+ "summary": "DTO (Data Transfer Object) สำหรับรับข้อมูลการสร้างแท็กใหม่จาก client โดยกำหนดโครงสร้างและประเภทของฟิลด์ที่ต้องใช้ เช่น name, projectId และอื่น ๆ เพื่อรักษาความสมบูรณ์ของข้อมูล",
+ "tags": [
+ "dto",
+ "validation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/tags/entities/correspondence-tag.entity.ts",
+ "type": "file",
+ "name": "correspondence-tag.entity.ts",
+ "filePath": "modules/tags/entities/correspondence-tag.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของความสัมพันธ์ระหว่างแท็กกับเอกสารความสัมพันธ์ (Correspondence) เพื่อให้สามารถเชื่อมโยงแท็กไปยังรายการเอกสารได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "entity",
+ "relationship-model"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/tags/entities/tag.entity.ts",
+ "type": "file",
+ "name": "tag.entity.ts",
+ "filePath": "modules/tags/entities/tag.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของแท็ก (Tag) โดยใช้ Entity class เพื่อจัดเก็บข้อมูลเฉพาะเจาะจงสำหรับแต่ละแท็กในระบบ",
+ "tags": [
+ "entity",
+ "database-model"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/tags/tags.controller.ts",
+ "type": "file",
+ "filePath": "modules/tags/tags.controller.ts",
+ "name": "tags.controller.ts",
+ "summary": "Controller สำหรับจัดการ endpoint เกี่ยวกับแท็ก โดยรับคำขอจาก client และส่งข้อมูลกลับตามแนวทางของ NestJS",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/tags/tags.service.ts",
+ "type": "file",
+ "name": "tags.service.ts",
+ "filePath": "modules/tags/tags.service.ts",
+ "summary": "คลาส TagsService เป็นบริการหลักสำหรับจัดการข้อมูลแท็ก (Tags) โดยรองรับการทำงานต่าง ๆ เช่น การสร้างแท็กใหม่ การค้นหาตามโครงการ และการเชื่อมโยงกับรายการเอกสารความสัมพันธ์ (correspondence)",
+ "tags": [
+ "service",
+ "tag-management",
+ "project-based",
+ "entity-interaction"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/tags/tags.module.ts",
+ "type": "file",
+ "name": "tags.module.ts",
+ "filePath": "modules/tags/tags.module.ts",
+ "summary": "โมดูลสำหรับจัดการข้อมูลประเภทแท็ก โดยมีหน้าที่เชื่อมโยงระหว่าง entity ต่าง ๆ และ controller/service เพื่อให้ระบบสามารถใช้งานฟังก์ชันจัดการแท็กได้อย่างเป็นระเบียบ",
+ "tags": [
+ "module",
+ "nestjs",
+ "tag-management"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/user.module.ts",
+ "type": "file",
+ "name": "user.module.ts",
+ "filePath": "modules/user/user.module.ts",
+ "summary": "โมดูลสำหรับจัดการข้อมูลผู้ใช้งาน โดยมีหน้าที่รองรับการทำงานด้านสิทธิ์และบทบาทของผู้ใช้ในระบบ",
+ "tags": [
+ "user-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/auth/dto/login.dto.ts",
+ "type": "file",
+ "name": "login.dto.ts",
+ "filePath": "common/auth/dto/login.dto.ts",
+ "summary": "คลาส LoginDto เป็นโครงสร้างข้อมูลสำหรับการรับข้อมูลเข้ามาใช้ในการล็อกอิน โดยมีคุณสมบัติชื่อผู้ใช้งานและรหัสผ่าน เพื่อนำไปประมวลผลในระบบตรวจสอบสิทธิ์",
+ "tags": [
+ "dto",
+ "login",
+ "authentication"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/auth/dto/register.dto.ts",
+ "type": "file",
+ "name": "register.dto.ts",
+ "filePath": "common/auth/dto/register.dto.ts",
+ "summary": "คลาส RegisterDto เป็นโครงสร้างข้อมูลสำหรับการลงทะเบียนผู้ใช้งาน โดยมีจุดประสงค์เพื่อเก็บข้อมูลที่จำเป็นในการสร้างบัญชีใหม่ เช่น อีเมล, รหัสผ่าน และชื่อ-นามสกุล เป็นต้น",
+ "tags": [
+ "dto",
+ "authentication",
+ "registration"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/auth/entities/refresh-token.entity.ts",
+ "type": "file",
+ "name": "refresh-token.entity.ts",
+ "filePath": "common/auth/entities/refresh-token.entity.ts",
+ "summary": "คลาส RefreshToken เป็น Entity สำหรับจัดการโทเคนรีเฟรช (Refresh Token) โดยมีความเกี่ยวข้องกับโมดูล User และใช้ในการจัดการการยืนยันตัวตนแบบ secure การสร้างและจัดเก็บ refreshToken มักจะทำผ่านระบบฐานข้อมูลเพื่อให้มั่นใจว่าสามารถตรวจสอบได้ว่าโทเคนนี้ถูกใช้งานจริงหรือไม่",
+ "tags": [
+ "entity",
+ "auth",
+ "refresh-token"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/auth/guards/permissions.guard.ts",
+ "type": "file",
+ "name": "permissions.guard.ts",
+ "filePath": "common/auth/guards/permissions.guard.ts",
+ "summary": "คุ้มครองสิทธิ์การเข้าถึงข้อมูล โดยตรวจสอบว่าผู้ใช้งานมีสิทธิ์หรือไม่ก่อนจะดำเนินการใดๆ ได้ตามบทบาทที่กำหนดไว้",
+ "tags": [
+ "middleware",
+ "auth"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/auth/casl/ability.factory.ts",
+ "type": "file",
+ "name": "ability.factory.ts",
+ "filePath": "common/auth/casl/ability.factory.ts",
+ "summary": "คลาสที่สร้างความสามารถในการเข้าถึงข้อมูล (Ability) โดยใช้ CASL เพื่อควบคุมการตรวจสอบสิทธิ์ผู้ใช้งานในระบบ",
+ "tags": [
+ "auth",
+ "casl",
+ "ability"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/auth/strategies/jwt-refresh.strategy.ts",
+ "type": "file",
+ "name": "jwt-refresh.strategy.ts",
+ "filePath": "common/auth/strategies/jwt-refresh.strategy.ts",
+ "summary": "คลาส JwtRefreshStrategy ใช้สำหรับจัดการกระบวนการยืนยันตัวตนผ่านโทเคนรีเฟรช (refresh token) โดยมีเมธอด constructor และ validate เพื่อตรวจสอบข้อมูลโทเคนและสร้าง session อัตโนมัติ",
+ "tags": [
+ "authentication",
+ "jwt",
+ "strategy",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/auth/strategies/jwt.strategy.ts",
+ "type": "file",
+ "name": "jwt.strategy.ts",
+ "filePath": "common/auth/strategies/jwt.strategy.ts",
+ "summary": "คลาส JwtStrategy ใช้สำหรับจัดการกระบวนการยืนยันตัวตนผ่าน JWT โดยรับข้อมูลจาก token และตรวจสอบความถูกต้องของข้อมูลผู้ใช้งานก่อนจะส่งค่ากลับไปยังระบบหลัก",
+ "tags": [
+ "authentication",
+ "jwt",
+ "strategy"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/decorators/audit.decorator.ts",
+ "type": "file",
+ "name": "audit.decorator.ts",
+ "filePath": "common/decorators/audit.decorator.ts",
+ "summary": "Decorator ที่ใช้ตรวจสอบและบันทึกกิจกรรมของผู้ใช้งานในระบบ เช่น การสร้างหรือแก้ไขข้อมูล เพื่อความปลอดภัยและความโปร่งใสในการทำงาน",
+ "tags": [
+ "decorator",
+ "audit-log"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/decorators/current-user.decorator.ts",
+ "type": "file",
+ "name": "current-user.decorator.ts",
+ "filePath": "common/decorators/current-user.decorator.ts",
+ "summary": "Decorator ที่ใช้ในการดึงข้อมูลผู้ใช้งานปัจจุบันจาก token และส่งคืนเป็น context ใน middleware เพื่อให้ controller เห็นรายละเอียดของ user",
+ "tags": [
+ "decorator"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/file-storage/file-storage.controller.ts",
+ "type": "file",
+ "name": "file-storage.controller.ts",
+ "filePath": "common/file-storage/file-storage.controller.ts",
+ "summary": "Controller สำหรับจัดการ endpoint เกี่ยวกับไฟล์ เช่น การอัปโหลด การดาวน์โหลด และการตรวจสอบสถานะไฟล์ โดยใช้บริการหลักในการประมวลผลคำขอจากผู้ใช้งาน",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/file-storage/file-storage.service.ts",
+ "type": "file",
+ "name": "file-storage.service.ts",
+ "filePath": "common/file-storage/file-storage.service.ts",
+ "summary": "บริการสำหรับจัดการไฟล์แนบในระบบ โดยรองรับการทำงานด้านอัปโหลด ดาวน์โหลด และจัดเก็บไฟล์อย่างปลอดภัยและมีประสิทธิภาพ",
+ "tags": [
+ "file-storage",
+ "storage-service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/guards/jwt-refresh.guard.ts",
+ "type": "file",
+ "name": "jwt-refresh.guard.ts",
+ "filePath": "/src/common/guards/jwt-refresh.guard.ts",
+ "summary": "คุณสมบัติการตรวจสอบโทเคนรีเฟรช JWT โดยใช้ guard เพื่อควบคุมการทำงานของ route เมื่อมีการขอรับโทเคนใหม่",
+ "tags": [
+ "guard",
+ "jwt",
+ "refresh-token"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/interceptors/audit-log.interceptor.ts",
+ "type": "file",
+ "name": "audit-log.interceptor.ts",
+ "filePath": "common/interceptors/audit-log.interceptor.ts",
+ "summary": "คลาส AuditLogInterceptor ใช้สำหรับบันทึกเหตุการณ์การทำงานของ API โดยเก็บข้อมูลเช่น เวลาเริ่มต้น-สิ้นสุด การเข้าถึง endpoint และผู้ใช้งานรายละเอียด เพื่อให้มีระบบตรวจสอบและติดตามกิจกรรมได้อย่างแม่นยำ",
+ "tags": [
+ "interceptor",
+ "audit-log",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/entities/audit-log.entity.ts",
+ "type": "file",
+ "name": "audit-log.entity.ts",
+ "filePath": "common/entities/audit-log.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลการตรวจสอบระบบ (Audit Log) โดยใช้ในโมดูล response-code เพื่อให้มีการบันทึกเหตุการณ์สำคัญเมื่อมีการเปลี่ยนแปลงค่า Response Code",
+ "tags": [
+ "entity",
+ "audit-log"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/controllers/intent-analytics.controller.ts",
+ "type": "file",
+ "name": "intent-analytics.controller.ts",
+ "filePath": "modules/ai/intent-classifier/controllers/intent-analytics.controller.ts",
+ "summary": "คอนโทรลเลอร์สำหรับการแสดงผลข้อมูลวิเคราะห์เจตนา เช่น การกระจายของคำสั่งผู้ใช้ในแต่ละหมวดหมู่ เพื่อช่วยในการปรับปรุงระบบ AI",
+ "tags": [
+ "controller",
+ "analytics"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/intent-analytics.service.ts",
+ "type": "file",
+ "name": "intent-analytics.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/intent-analytics.service.ts",
+ "summary": "บริการสำหรับวิเคราะห์ข้อมูลเจตนา เช่น การนับจำนวนคำสั่งในแต่ละหมวดหมู่ เพื่อให้สามารถปรับปรุงระบบ AI ได้อย่างแม่นยำและมีประสิทธิภาพมากขึ้น",
+ "tags": [
+ "service",
+ "analytics"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "type": "file",
+ "name": "ai-prompts.controller.ts",
+ "filePath": "modules/ai/prompts/ai-prompts.controller.ts",
+ "summary": "ควบคุมการรับคำขอและส่งคำตอบจากโมดูล AI prompts โดยใช้ middleware และ service เพื่อประมวลผลข้อมูลอย่างมีประสิทธิภาพ",
+ "tags": [
+ "controller",
+ "ai-prompts"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/prompts/ai-prompts.entity.ts",
+ "type": "file",
+ "name": "ai-prompts.entity.ts",
+ "filePath": "modules/ai/prompts/ai-prompts.entity.ts",
+ "summary": "คลาสที่ใช้แทนค่าข้อมูลของ prompts สำหรับ AI โดยมีโครงสร้างเพื่อเก็บรักษา prompt และ metadata เกี่ยวกับการใช้งาน",
+ "tags": [
+ "entity",
+ "ai-prompts"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "type": "file",
+ "name": "ai-prompts.service.ts",
+ "filePath": "modules/ai/prompts/ai-prompts.service.ts",
+ "summary": "ส่วนประกอบของระบบ ai-prompts.service.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/prompts/dto/create-ai-prompt.dto.ts",
+ "type": "file",
+ "name": "create-ai-prompt.dto.ts",
+ "filePath": "modules/ai/prompts/dto/create-ai-prompt.dto.ts",
+ "summary": "คลาส CreateAiPromptDto ใช้สำหรับกำหนดรูปแบบข้อมูลนำเข้าเมื่อสร้าง prompt โดยเฉพาะอย่างยิ่งในบริบทของระบบ AI การจัดการข้อมูลนี้ช่วยให้มั่นใจว่าข้อมูลที่ส่งมาถูกต้องตามโครงสร้างที่กำหนดไว้",
+ "tags": [
+ "dto",
+ "ai-prompt",
+ "input-validation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/prompts/dto/update-prompt-note.dto.ts",
+ "type": "file",
+ "name": "update-prompt-note.dto.ts",
+ "filePath": "modules/ai/prompts/dto/update-prompt-note.dto.ts",
+ "summary": "คลาส UpdatePromptNoteDto ใช้สำหรับกำหนดรูปแบบข้อมูลนำเข้าเมื่อต้องการอัปเดทโน้ตของ prompt โดยมีจุดประสงค์เพื่อยืนยันความถูกต้องและครบถ้วนของข้อมูลก่อนนำไปประมวลผล",
+ "tags": [
+ "dto",
+ "update-prompt-note"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/prompts/dto/ai-prompt-response.dto.ts",
+ "type": "file",
+ "name": "ai-prompt-response.dto.ts",
+ "filePath": "modules/ai/prompts/dto/ai-prompt-response.dto.ts",
+ "summary": "คลาส AiPromptResponseDto ใช้สำหรับกำหนดโครงสร้างข้อมูลตอบกลับจากระบบ AI โดยมีจุดประสงค์เพื่อให้แน่ใจว่าข้อมูลที่ส่งออกมาจะอยู่ในรูปแบบมาตรฐานและสามารถนำไปประมวลผลได้อย่างถูกต้อง",
+ "tags": [
+ "dto",
+ "ai-response",
+ "response-structure"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/audit-log/audit-log.controller.ts",
+ "type": "file",
+ "name": "audit-log.controller.ts",
+ "filePath": "modules/audit-log/audit-log.controller.ts",
+ "summary": "คอนโทรลเลอร์สำหรับจัดการ API เกี่ยวกับบันทึกเหตุการณ์ โดยรับคำขอจากผู้ใช้งานและส่งข้อมูลกลับตามโครงสร้างที่กำหนดไว้ในโมดูล",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/audit-log/audit-log.service.ts",
+ "type": "file",
+ "name": "audit-log.service.ts",
+ "filePath": "modules/audit-log/audit-log.service.ts",
+ "summary": "คลาส AuditLogService ใช้จัดการกับการทำงานของระบบบันทึกเหตุการณ์ (Audit Log) โดยมีเมธอด findAll เพื่อค้นหาข้อมูลบันทึกได้อย่างมีประสิทธิภาพ และรับค่าจาก entity audit-log.entity",
+ "tags": [
+ "service",
+ "audit-log",
+ "entity"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:src/common/auth/auth.controller.ts",
+ "type": "file",
+ "name": "auth.controller.ts",
+ "filePath": "src/common/auth/auth.controller.ts",
+ "summary": "คลาส AuthController เป็นตัวจัดการ API สำหรับระบบตรวจสอบสิทธิ์และยืนยันตัวตน โดยมีเมธอดรองรับการทำงานหลัก ๆ เช่น การเข้าสู่ระบบ (login), การลงทะเบียนผู้ใช้งาน (register), การอัปเดตรหัสใหม่ (refresh token) และการออกจากระบบ (logout) นอกจากนี้ยังรองรับการดึงข้อมูลโปรไฟล์และตรวจสอบเซสชันของผู้ใช้",
+ "tags": [
+ "controller",
+ "auth",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:src/common/auth/auth.service.ts",
+ "type": "file",
+ "name": "auth.service.ts",
+ "filePath": "src/common/auth/auth.service.ts",
+ "summary": "บริการสำหรับจัดการกระบวนการตรวจสอบสิทธิ์และการยืนยันตัวตนของผู้ใช้งาน โดยมีหน้าที่หลักในการสร้างและตรวจสอบโทเคน JWT",
+ "tags": [
+ "service",
+ "authentication"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:src/common/auth/dto/login.dto.ts",
+ "type": "file",
+ "name": "login.dto.ts",
+ "filePath": "src/common/auth/dto/login.dto.ts",
+ "summary": "โครงสร้างข้อมูล (DTO) สำหรับรับข้อมูลการเข้าสู่ระบบ โดยกำหนดรูปแบบของฟิลด์ที่ต้องใช้ เช่น อีเมลและรหัสผ่าน เพื่อให้มั่นใจว่าข้อมูลที่ได้รับมีความถูกต้องตามมาตรฐาน",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:src/common/auth/dto/register.dto.ts",
+ "type": "file",
+ "name": "register.dto.ts",
+ "filePath": "src/common/auth/dto/register.dto.ts",
+ "summary": "โครงสร้างข้อมูล (DTO) สำหรับรับข้อมูลการลงทะเบียนผู้ใช้งาน โดยกำหนดฟิลด์ที่จำเป็น เช่น อีเมล, รหัสผ่าน และชื่อ-นามสกุล เพื่อรักษาความถูกต้องของข้อมูล",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:src/common/guards/jwt-auth.guard.ts",
+ "type": "file",
+ "name": "jwt-auth.guard.ts",
+ "filePath": "src/common/guards/jwt-auth.guard.ts",
+ "summary": "คุ้มครอง (guard) สำหรับตรวจสอบ JWT ใน header เพื่อยืนยันว่าผู้ใช้งานเข้าสู่ระบบแล้วจริง ๆ โดยดึงข้อมูลผู้ใช้งานจากโทเคนมาใช้งานใน controller",
+ "tags": [
+ "middleware",
+ "guard"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:src/common/guards/jwt-refresh.guard.ts",
+ "type": "file",
+ "name": "jwt-refresh.guard.ts",
+ "filePath": "src/common/auth/guards/jwt-refresh.guard.ts",
+ "summary": "คิวรีรักษาความปลอดภัย (Guard) สำหรับการใช้ token อัปเดต เพื่อยืนยันว่าผู้ใช้มีสิทธิ์ในการขอ refresh token และสามารถเข้าถึง API เหล่านี้ได้อย่างปลอดภัย",
+ "tags": [
+ "guard",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:src/common/interfaces/request-with-user.interface.ts",
+ "type": "file",
+ "name": "request-with-user.interface.ts",
+ "filePath": "src/common/interfaces/request-with-user.interface.ts",
+ "summary": "อินเตอร์เฟซที่กำหนดโครงสร้างของ request object ให้มีค่า user เป็นตัวแปรภายใน เพื่อให้ controller และ service เข้าถึงข้อมูลผู้ใช้งานได้อย่างสะดวก",
+ "tags": [
+ "interface"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:src/common/auth/auth.module.ts",
+ "type": "file",
+ "name": "auth.module.ts",
+ "filePath": "src/common/auth/auth.module.ts",
+ "summary": "โมดูลหลักสำหรับการจัดการระบบตรวจสอบสิทธิ์และยืนยันตัวตน โดยใช้ JWT และกลไกอื่นๆ เช่น refresh token, session management และ permissions guard เพื่อให้มั่นใจในความปลอดภัยของข้อมูลผู้ใช้งาน",
+ "tags": [
+ "auth-module",
+ "middleware",
+ "jwt-authentication",
+ "permissions-guard"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/user/entities/user.entity.ts",
+ "type": "file",
+ "name": "user.entity.ts",
+ "filePath": "modules/user/entities/user.entity.ts",
+ "summary": "Entity ของโมดูล user ที่ใช้ในการจัดเก็บข้อมูลผู้ใช้งาน โดยมีฟิลด์เช่น id, email, role เป็นต้น และถูกใช้ร่วมกับ decorator เพื่อระบุบทบาท (role) ในระบบ",
+ "tags": [
+ "entity"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:src/common/auth/session.controller.ts",
+ "type": "file",
+ "name": "session.controller.ts",
+ "filePath": "src/common/auth/session.controller.ts",
+ "summary": "คลาส SessionController เป็นตัวจัดการ API สำหรับบริหารจัดการเซッションของผู้ใช้งาน โดยมีเมธอดหลัก ๆ เช่น getActiveSessions เพื่อดึงข้อมูลเซッションที่เปิดอยู่ และ revokeSession เพื่อลบเซッションออก นอกจากนี้ยังมี checkAdminRole สำหรับตรวจสอบสิทธิ์ผู้ใช้งานระดับแอนด์เมิน",
+ "tags": [
+ "controller",
+ "auth",
+ "session-management"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:src/modules/user/entities/user.entity.ts",
+ "type": "file",
+ "name": "user.entity.ts",
+ "filePath": "src/modules/user/entities/user.entity.ts",
+ "summary": "Entity ของผู้ใช้งานในระบบ โดยมีฟิลด์สำคัญ เช่น id, email และ role เพื่อเก็บข้อมูลพื้นฐานของแต่ละบุคคล",
+ "tags": [
+ "entity"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/user.service.ts",
+ "type": "file",
+ "name": "user.service.ts",
+ "filePath": "modules/user/user.service.ts",
+ "summary": "คลาส UserService เป็นบริการหลักสำหรับจัดการข้อมูลผู้ใช้งาน โดยมีหน้าที่รองรับการทำงานต่าง ๆ เช่น การสร้าง ดูรายละเอียด เปลี่ยนแปลง และลบบัญชีผู้ใช้ อีกทั้งยังจัดการสิทธิ์และบทบาทของผู้ใช้งานได้อย่างครบวงจร",
+ "tags": [
+ "service",
+ "user-management",
+ "authentication",
+ "permission-control"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/circulation/circulation.controller.ts",
+ "type": "file",
+ "name": "circulation.controller.ts",
+ "filePath": "modules/circulation/circulation.controller.ts",
+ "summary": "คลาสควบคุมการจัดการ API สำหรับวงจรเอกสาร โดยรับคำขอจากผู้ใช้งานและส่งผลลัพธ์กลับไปยัง client",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/circulation/circulation.service.ts",
+ "type": "file",
+ "name": "circulation.service.ts",
+ "filePath": "modules/circulation/circulation.service.ts",
+ "summary": "บริการหลักสำหรับจัดการกระบวนการส่งเอกสาร (Circulation) โดยมีหน้าที่รับคำขอสร้างรายการส่ง ค้นหาข้อมูลตามเงื่อนไข และปรับเปลี่ยนสถานะการส่งเอกสารได้ การทำงานรวมถึงการตรวจสอบสิทธิ์ผู้ใช้งานเพื่อให้มั่นใจว่ามีสิทธิ์ดำเนินการแต่ละขั้นตอนอย่างเหมาะสม",
+ "tags": [
+ "service",
+ "circulation",
+ "document-routing",
+ "permission-check"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/circulation/dto/create-circulation.dto.ts",
+ "type": "file",
+ "name": "create-circulation.dto.ts",
+ "filePath": "modules/circulation/dto/create-circulation.dto.ts",
+ "summary": "คลาส CreateCirculationDto ใช้สำหรับกำหนดโครงสร้างข้อมูลในการสร้างรายการการยืมคืนหนังสือ โดยประกอบด้วยฟิลด์ต่าง ๆ เช่น เลขที่สมาชิก, รหัสหนังสือ และวันที่เริ่มยืม เพื่อให้มั่นใจว่าข้อมูลที่รับเข้ามาถูกต้องและครบถ้วนก่อนนำไปประมวลผล",
+ "tags": [
+ "dto",
+ "circulation",
+ "create"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/circulation/dto/force-close-circulation.dto.ts",
+ "type": "file",
+ "name": "force-close-circulation.dto.ts",
+ "filePath": "modules/circulation/dto/force-close-circulation.dto.ts",
+ "summary": "คลาส ForceCloseCirculationDto ใช้สำหรับกำหนดโครงสร้างข้อมูลในการปิดการให้ยืมหนังสือโดยเร่งด่วน โดยไม่มีเมธอดใดๆ มีเพียงการประกาศตัวแปรและประเภทข้อมูลเท่านั้น",
+ "tags": [
+ "dto",
+ "circulation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/circulation/dto/reassign-routing.dto.ts",
+ "type": "file",
+ "name": "reassign-routing.dto.ts",
+ "filePath": "modules/circulation/dto/reassign-routing.dto.ts",
+ "summary": "คลาส ReassignRoutingDto เป็นโครงสร้างข้อมูลสำหรับการจัดสรรเส้นทางใหม่ โดยมีหน้าที่รับและจัดเก็บข้อมูลที่จำเป็นในการดำเนินการเปลี่ยนเส้นทางของรายการห้องสมุด",
+ "tags": [
+ "dto",
+ "circulation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/circulation/dto/search-circulation.dto.ts",
+ "type": "file",
+ "name": "search-circulation.dto.ts",
+ "filePath": "modules/circulation/dto/search-circulation.dto.ts",
+ "summary": "คลาส SearchCirculationDto ใช้สำหรับรับข้อมูลการค้นหาหนังสือในระบบการจัดเก็บผลงาน โดยมีโครงสร้างเพื่อระบุเงื่อนไขในการค้นหา เช่น เลขอ้างอิง, ชื่อผู้แต่ง, และประเภทของงาน",
+ "tags": [
+ "dto",
+ "circulation",
+ "search"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/circulation/dto/update-circulation-routing.dto.ts",
+ "type": "file",
+ "name": "update-circulation-routing.dto.ts",
+ "filePath": "modules/circulation/dto/update-circulation-routing.dto.ts",
+ "summary": "คลาส UpdateCirculationRoutingDto ใช้สำหรับรับข้อมูลนำเข้าเพื่อปรับแต่งการจัดลำดับการให้บริการ (circulation routing) โดยมีโครงสร้างเฉพาะทางที่กำหนดไว้อย่างชัดเจน",
+ "tags": [
+ "dto",
+ "circulation-routing"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/correspondence.controller.ts",
+ "type": "file",
+ "name": "correspondence.controller.ts",
+ "filePath": "modules/correspondence/correspondence.controller.ts",
+ "summary": "คลาสควบคุมการจัดการเอกสารสื่อสาร (CorrespondenceController) มีหน้าที่รับคำขอจากผู้ใช้งานและส่งต่อไปยังบริการหลักเพื่อดำเนินการตามเหตุผลต่าง ๆ เช่น การสร้าง แสดงตัวอย่างเลขที่ ส่งเอกสาร เปลี่ยนแปลงข้อมูล และจัดการรายการอ้างอิงหรือแท็ก โดยใช้ Decorators เพื่อกำหนดสิทธิ์เข้าถึงและตรวจสอบความปลอดภัยของคำขอ",
+ "tags": [
+ "controller",
+ "middleware",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/correspondence/correspondence.service.ts",
+ "type": "file",
+ "name": "correspondence.service.ts",
+ "filePath": "modules/correspondence/correspondence.service.ts",
+ "summary": "บริการหลักสำหรับจัดการเอกสารสื่อสารภายในองค์กร โดยมีหน้าที่รองรับการทำงานต่าง ๆ เช่น การสร้าง แก้ไข เอกสารสื่อสาร การตรวจสอบสิทธิ์ผู้ใช้งาน การจัดเก็บข้อมูลผู้รับ และการจัดการแท็กและอ้างอิงเอกสาร",
+ "tags": [
+ "service",
+ "correspondence-management",
+ "document-handling"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "type": "file",
+ "name": "correspondence-workflow.service.ts",
+ "filePath": "modules/correspondence/corresponding-workflow.service.ts",
+ "summary": "บริการหลักสำหรับจัดการกระบวนการส่งเอกสารติดต่อ โดยมีหน้าที่รับคำขอและดำเนินการตามลำดับขั้นตอนต่าง ๆ เช่น การยืนยันสถานะ แจ้งเตือนผู้เกี่ยวข้อง และเชื่อมโยงกับระบบ AI เพื่อเตรียมเอกสารประกอบ",
+ "tags": [
+ "service",
+ "workflow-engine",
+ "correspondence-process",
+ "ai-integration"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/correspondence/dto/add-reference.dto.ts",
+ "type": "file",
+ "name": "add-reference.dto.ts",
+ "filePath": "modules/correspondence/dto/add-reference.dto.ts",
+ "summary": "คลาส AddReferenceDto เป็นโครงสร้างข้อมูลสำหรับรับข้อมูลการเพิ่มอ้างอิงในโมดูล correspondence โดยไม่มีเมธอดใดๆ มีจำนวนบรรทัดโค้ดเท่ากับ 9 บรรทัด",
+ "tags": [
+ "dto",
+ "correspondence"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/dto/bulk-cancel.dto.ts",
+ "type": "file",
+ "name": "bulk-cancel.dto.ts",
+ "filePath": "modules/correspondence/dto/bulk-cancel.dto.ts",
+ "summary": "คลาส BulkCancelDto เป็นโครงสร้างข้อมูลสำหรับการยกเลิกเอกสารจำนวนมาก โดยมีจุดประสงค์เพื่อรับและประมวลผลข้อมูลที่เกี่ยวข้องกับการทำรายการยกเลิกเอกสารในระบบ การใช้งานนี้ช่วยให้สามารถส่งคำขอยกเลิกได้อย่างมีประสิทธิภาพ และรองรับการจัดการหลายรายการพร้อมกัน",
+ "tags": [
+ "dto",
+ "bulk-cancel",
+ "correspondence"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/dto/cancel-correspondence.dto.ts",
+ "type": "file",
+ "name": "cancel-correspondence.dto.ts",
+ "filePath": "modules/correspondspondence/dto/cancel-correspondence.dto.ts",
+ "summary": "คลาส CancelCorrespondenceDto ใช้สำหรับรับข้อมูลการยกเลิกเอกสารสื่อสาร โดยมีโครงสร้างเพียงแค่ชื่อไฟล์เท่านั้น และไม่มีเมธอดใดๆ เกี่ยวข้อง",
+ "tags": [
+ "dto",
+ "cancel-correspondence"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/dto/create-correspondence.dto.ts",
+ "type": "file",
+ "name": "create-correspondence.dto.ts",
+ "filePath": "modules/correspondence/dto/create-correspondence.dto.ts",
+ "summary": "คลาส CreateCorrespondenceDto ใช้สำหรับกำหนดโครงสร้างข้อมูลในการสร้างเอกสารการสื่อสาร โดยมีคุณสมบัติหลายอย่าง เช่น เลขที่เอกสาร การระบุประเภทเอกสาร และรายละเอียดผู้รับ-ผู้ส่ง เพื่อให้แน่ใจว่าข้อมูลที่ส่งเข้ามาถูกต้องและครบถ้วน",
+ "tags": [
+ "dto",
+ "correspondence",
+ "create"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/correspondence/dto/search-correspondence.dto.ts",
+ "type": "file",
+ "name": "search-correspondence.dto.ts",
+ "filePath": "modules/corresponding/dto/search-correspondence.dto.ts",
+ "summary": "คลาส SearchCorrespondenceDto ใช้สำหรับรับข้อมูลการค้นหาเอกสารทางธุรกิจ โดยมีโครงสร้างเพื่อเก็บค่าต่าง ๆ เช่น เลขที่เรียน, วันที่เริ่มต้น และสิ้นสุด เพื่อนำไปใช้งานในระบบค้นหาเอกสาร",
+ "tags": [
+ "dto",
+ "search",
+ "correspondence"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/dto/submit-correspondence.dto.ts",
+ "type": "file",
+ "name": "submit-correspondence.dto.ts",
+ "filePath": "modules/correspondence/dto/submit-correspondence.dto.ts",
+ "summary": "คลาส SubmitCorrespondenceDto ใช้สำหรับรับข้อมูลการส่งเอกสารติดต่อเข้ามา โดยมีโครงสร้างชัดเจนเพื่อให้แน่ใจว่าข้อมูลที่ได้รับตรงตามมาตรฐาน และสามารถนำไปประมวลผลต่อไปได้อย่างถูกต้อง",
+ "tags": [
+ "dto",
+ "correspondence",
+ "submit"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/dto/update-correspondence.dto.ts",
+ "type": "file",
+ "name": "update-correspondence.dto.ts",
+ "filePath": "modules/correspondspondence/dto/update-correspondence.dto.ts",
+ "summary": "คลาส UpdateCorrespondenceDto ใช้สำหรับรับข้อมูลอัปเดตเอกสารการสื่อสาร โดยมีโครงสร้างเฉพาะเจาะจงเพื่อกำหนดค่าที่ยอมรับได้ในระบบ การกำหนดประเภทของฟิลด์ช่วยให้มั่นใจว่าข้อมูลเข้ามาถูกต้องตามมาตรฐาน",
+ "tags": [
+ "dto",
+ "correspondence",
+ "update",
+ "data-transfer-object"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/dto/workflow-action.dto.ts",
+ "type": "file",
+ "name": "workflow-action.dto.ts",
+ "filePath": "modules/correspondence/dto/workflow-action.dto.ts",
+ "summary": "DTO สำหรับกำหนดโครงสร้างข้อมูลของการดำเนินการในระบบ workflow เช่น การอนุมัติเอกสาร โดยใช้ร่วมกันระหว่างโมดูล correspondence และ rfa",
+ "tags": [
+ "dto",
+ "workflow"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/ai-ingest.service.ts",
+ "type": "file",
+ "name": "ai-ingest.service.ts",
+ "filePath": "modules/ai/ai-ingest.service.ts",
+ "summary": "บริการหลักสำหรับจัดการกระบวนการนำเข้าข้อมูล AI โดยมีหน้าที่รับไฟล์จากผู้ใช้ ตรวจสอบความถูกต้องของไฟล์ เก็บข้อมูลลงในระบบ และเชื่อมโยงไปยังโมดูลอื่นๆ เช่น การจัดการโครงการและการอนุมัติงาน โดยมีเมธอดสำคัญหลายรายการที่ครอบคลุมจากกระบวนการเริ่มต้นจนถึงส่งออกข้อมูล",
+ "tags": [
+ "ai-ingest-service",
+ "file-processing",
+ "migration-review",
+ "audit-log"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/ai/ai-migration-checkpoint.service.ts",
+ "type": "file",
+ "name": "ai-migration-checkpoint.service.ts",
+ "filePath": "modules/ai/ai-migration-checkpoint.service.ts",
+ "summary": "บริการสำหรับจัดการจุดยืนของการย้ายข้อมูล AI โดยเก็บสถานะและประวัติการทำ migration ไว้ในฐานข้อมูล เพื่อใช้งานซ้ำได้อีกครั้งในอนาคต หากมีปัญหาในการย้ายข้อมูล จะสามารถดึง checkpoint มาตรวจสอบและแก้ไขได้อย่างแม่นยำ",
+ "tags": [
+ "service",
+ "migration-checkpoint",
+ "ai-migration"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/ai-queue.service.ts",
+ "type": "file",
+ "name": "ai-queue.service.ts",
+ "filePath": "modules/ai/ai-queue.service.ts",
+ "summary": "บริการจัดการคิวงานสำหรับโมเดล AI โดยรองรับการทำงานแบบพร้อมกันและควบคุมลำดับการทำงานของเอกสารต่าง ๆ",
+ "tags": [
+ "middleware",
+ "ai-processing"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/ai-rag.service.ts",
+ "type": "file",
+ "name": "ai-rag.service.ts",
+ "filePath": "modules/ai/ai-rag.service.ts",
+ "summary": "บริการหลักสำหรับจัดการ Retrieval-Augmented Generation (RAG) โดยใช้โมเดล AI เพื่อดึงข้อมูลจากฐานข้อมูลและสร้างคำตอบที่มีความแม่นยำสูง",
+ "tags": [
+ "rag-service",
+ "ai-model"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/ai-settings.service.ts",
+ "type": "file",
+ "name": "ai-settings.service.ts",
+ "filePath": "modules/ai/ai-settings.service.ts",
+ "summary": "บริการที่ดูแลค่าตั้งค่าของระบบ AI เช่น สถานะการทำงานหรือขีดจำกัดใช้งาน",
+ "tags": [
+ "service",
+ "ai-config"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/exceptions/index.ts",
+ "type": "file",
+ "name": "index.ts",
+ "filePath": "common/exceptions/index.ts",
+ "summary": "ไฟล์รวมข้อยกเว้นทั่วไปของระบบ เช่น การจัดการ error ต่าง ๆ ในระหว่างการทำงานของโมดูลต่าง ๆ โดยเฉพาะเมื่อมีข้อผิดพลาดในการแปลง DSL",
+ "tags": [
+ "exception",
+ "error-handling"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/ai-validation.service.ts",
+ "type": "file",
+ "name": "ai-validation.service.ts",
+ "filePath": "modules/ai/ai-validation.service.ts",
+ "summary": "บริการตรวจสอบผลลัพธ์จาก AI โดยมีหน้าที่รับข้อมูลเข้ามาและประเมินความถูกต้องของคำตอบตามเกณฑ์เฉพาะทาง เช่น การตรวจสอบว่าคำตอบอยู่ในขอบเขตของสาขาอาชีพหรือไม่ และสร้างรายงานการตรวจสอบเพื่อใช้ในการจัดการคุณภาพผลลัพธ์ AI",
+ "tags": [
+ "service",
+ "ai-validation",
+ "discipline-checking"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/ai.controller.ts",
+ "type": "file",
+ "name": "ai.controller.ts",
+ "filePath": "modules/ai/ai.controller.ts",
+ "summary": "คลาส AiController เป็นตัวควบคุมหลักสำหรับการจัดการ API ทั้งหมดเกี่ยวกับระบบ AI โดยมีเมธอดครอบคลุมการทำงานหลายด้าน เช่น การจัดการงาน AI, การประมวลผลเอกสาร, การจัดการโมเดล AI และการตั้งค่าระบบ อินเตอร์เฟซรองรับการตรวจสอบสิทธิ์ผ่าน decorator และเชื่อมโยงกับบริการต่าง ๆ เช่น ai.service.ts, ai-migration-checkpoint.service.ts เพื่อให้งานสามารถทำงานได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "controller",
+ "ai-service",
+ "middleware",
+ "api-handler"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/ai/ai.module.ts",
+ "type": "file",
+ "name": "ai.module.ts",
+ "filePath": "modules/ai/ai.module.ts",
+ "summary": "ไฟล์โค้ดระบบ ai.module.ts",
+ "tags": [
+ "utility",
+ "barrel"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/ai.service.ts",
+ "type": "file",
+ "name": "ai.service.ts",
+ "filePath": "modules/ai/ai.service.ts",
+ "summary": "คลาส AiService เป็นบริการหลักสำหรับจัดการงาน AI ทั้งหมด โดยรองรับการทำงานหลายประเภท เช่น การสร้างงาน Suggest, Embed และ Unified Job การย้ายข้อมูล (Migration) การดึงสถานะงานจากคิว การประมวลผลแบบเรียลไทม์ผ่าน webhook callback นอกจากนี้ยังจัดการระบบตรวจสอบความปลอดภัย บันทึก log อัตโนมัติ และให้ข้อมูลเชิงสถิติเกี่ยวกับประสิทธิภาพของ AI โดยใช้งานบริการอื่นๆ เช่น OCR, Ollama และ VRAM Monitor เป็น middleware",
+ "tags": [
+ "ai-service",
+ "job-queue",
+ "realtime-processing",
+ "migration-manager",
+ "audit-log"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/ai/dto/activate-ai-model.dto.ts",
+ "type": "file",
+ "name": "activate-ai-model.dto.ts",
+ "filePath": "modules/ai/dto/activate-ai-model.dto.ts",
+ "summary": "คลาส ActivateAiModelDto ใช้สำหรับกำหนดโครงสร้างข้อมูลในการเปิดใช้งานโมเดล AI โดยมีจุดประสงค์เพื่อให้มั่นใจว่าข้อมูลที่รับเข้ามาจะอยู่ในรูปแบบและประเภทที่ถูกต้องตามความต้องการของระบบ",
+ "tags": [
+ "dto",
+ "ai-model",
+ "activation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/add-ai-model.dto.ts",
+ "type": "file",
+ "name": "add-ai-model.dto.ts",
+ "filePath": "modules/ai/dto/add-ai-model.dto.ts",
+ "summary": "คลาส AddAiModelDto ใช้สำหรับกำหนดโครงสร้างข้อมูลในการเพิ่มโมเดล AI เข้าระบบ โดยรับค่าต่าง ๆ เช่น model name, configuration และอื่น ๆ จาก entity ai-model-configuration เพื่อให้มั่นใจว่าข้อมูลที่ส่งเข้ามาถูกต้องตามมาตรฐาน",
+ "tags": [
+ "dto",
+ "ai",
+ "add-model"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/ai-admin-settings.dto.ts",
+ "type": "file",
+ "name": "ai-admin-settings.dto.ts",
+ "filePath": "modules/ai/dto/ai-admin-settings.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการจัดการคุณสมบัติ AI โดยเฉพาะอย่างยิ่งคลาส ToggleAiFeaturesDto ใช้ในการควบคุมการทำงานของฟีเจอร์ AI ในระบบ เช่น การเปิด-ปิดโมเดล AI เฉพาะเจาะจง",
+ "tags": [
+ "dto",
+ "ai-admin-settings",
+ "toggle-feature"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/ai-callback.dto.ts",
+ "type": "file",
+ "name": "ai-callback.dto.ts",
+ "filePath": "modules/ai/dto/ai-callback.dto.ts",
+ "summary": "คลาส AiCallbackDto ใช้สำหรับรับข้อมูล callback จากระบบ AI โดยมีการนำเข้า entity ai-audit-log.entity เพื่อให้สามารถจัดเก็บประวัติการเรียกใช้งานได้อย่างครบถ้วน",
+ "tags": [
+ "dto",
+ "ai-callback",
+ "callback-handler"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/ai-intent-request.dto.ts",
+ "type": "file",
+ "name": "ai-intent-request.dto.ts",
+ "filePath": "modules/ai/dto/ai-intent-request.dto.ts",
+ "summary": "คลาส AiIntentRequestDto ใช้สำหรับรับข้อมูลคำขอจากผู้ใช้งานเพื่อวิเคราะห์เจตนา โดยมีโครงสร้างที่ชัดเจนและตรงกับความต้องการของระบบ AI เครื่องมือภายในโมดูล ai",
+ "tags": [
+ "dto",
+ "ai-intent",
+ "request-dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/ai-job-response.dto.ts",
+ "type": "file",
+ "name": "ai-job-response.dto.ts",
+ "filePath": "modules/ai/dto/ai-job-response.dto.ts",
+ "summary": "คลาส AiJobResponseDto ใช้สำหรับกำหนดโครงสร้างข้อมูลตอบกลับจากงาน AI โดยมีการนำเข้าอินเตอร์เฟซ execution-policy.interface เพื่อกำหนดนโยบายการทำงานของระบบ",
+ "tags": [
+ "dto",
+ "ai-job-response",
+ "response-structure"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/ai-rag-query.dto.ts",
+ "type": "file",
+ "name": "ai-rag-query.dto.ts",
+ "filePath": "modules/ai/dto/ai-rag-query.dto.ts",
+ "summary": "คลาส AiRagQueryDto ใช้สำหรับกำหนดรูปแบบข้อมูลที่ต้องการในการสอบถามระบบ AI โดยอาศัย Retrieval-Augmented Generation (RAG) เพื่อให้ได้ผลลัพธ์ที่แม่นยำและเชื่อถือได้",
+ "tags": [
+ "dto",
+ "ai-rag-query",
+ "data-transfer-object"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/entities/uuid-base.entity.ts",
+ "type": "file",
+ "name": "uuid-base.entity.ts",
+ "filePath": "common/entities/uuid-base.entity.ts",
+ "summary": "ไฟล์นี้เป็นฐานรากสำหรับการจัดการ UUID ในระบบ โดยมีโครงสร้างที่ใช้ร่วมกันในหลายโมดูล เช่น การกำหนดคุณสมบัติของ ID และการสร้าง UUID อัตโนมัติ",
+ "tags": [
+ "base-entity",
+ "uuid"
+ ],
+ "complex": "simple",
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/dto/migration-checkpoint.dto.ts",
+ "type": "file",
+ "name": "migration-checkpoint.dto.ts",
+ "filePath": "modules/ai/dto/migration-checkpoint.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการจัดเก็บและส่งผ่าน checkpoint ของระบบ AI โดยมีคลาสหรือ DTO (Data Transfer Object) หลายตัว เช่น SaveCheckpointDto, MigrationQueueRecordDto และ MigrationErrorLogDto เพื่อใช้ในการจัดการสถานะการทำงานและการบันทึกข้อผิดพลาดในกระบวนการย้ายข้อมูล",
+ "tags": [
+ "dto",
+ "ai-module",
+ "migration-checkpoint",
+ "data-transfer-object"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/entities/migration-progress.entity.ts",
+ "type": "file",
+ "name": "migration-progress.entity.ts",
+ "filePath": "modules/ai/entities/migration-progress.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของ Entity เกี่ยวกับข้อมูลความคืบหน้าของการอัปเดตระบบ AI โดยมีคลาสชื่อ MigrationProgress ใช้ในการจัดเก็บสถานะและข้อมูลการดำเนินงานอย่างเป็นระบบ",
+ "tags": [
+ "entity",
+ "migration-progress",
+ "ai"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/entities/migration-review.entity.ts",
+ "type": "file",
+ "name": "migration-review.entity.ts",
+ "filePath": "modules/ai/entities/migration-review.entity.ts",
+ "summary": "Entity ที่ใช้เก็บข้อมูลการตรวจสอบย้ายข้อมูล โดยมีฟิลด์สำคัญ เช่น user_id, migration_item_id และสถานะ (approved/rejected) เพื่อบันทึกประวัติการดำเนินการ",
+ "tags": [
+ "entity",
+ "migration-review"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/entities/ai-available-model.entity.ts",
+ "type": "file",
+ "name": "ai-available-model.entity.ts",
+ "filePath": "modules/ai/entities/ai-available-model.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับโมเดล AI ที่มีอยู่ โดยใช้คลาส AiAvailableModel เพื่อจัดเก็บข้อมูลเฉพาะเจาะจงของแต่ละโมเดล เช่น ชื่อโมเดล เวอร์ชัน และคุณสมบัติการสนับสนุน อีกทั้งยังเป็นส่วนหนึ-่งของการสร้าง schema เพื่อนำไปใช้งานในระบบหลักได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "entity",
+ "ai-model",
+ "database-schema"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/entities/system-setting.entity.ts",
+ "type": "file",
+ "name": "system-setting.entity.ts",
+ "filePath": "modules/ai/entities/system-setting.entity.ts",
+ "summary": "Entity สำหรับเก็บค่าตั้งค่าระบบรวม เช่น เวลาตอบสนองมาตรฐาน, การจำกัดหน่วยความจำ และนโยบายการใช้งาน AI โดยรวม",
+ "tags": [
+ "system-config",
+ "global-setting"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/create-ai-job.dto.ts",
+ "type": "file",
+ "name": "create-ai-job.dto.ts",
+ "filePath": "modules/ai/dto/create-ai-job.dto.ts",
+ "summary": "ไฟล์นี้เป็น DTO (Data Transfer Object) สำหรับการสร้างงาน AI โดยมีคลาสชื่อ CreateAiJobDto และฟังก์ชัน IsForbidden เก็บไว้ใช้งานร่วมกัน มีการนำเข้าจาก modules/ai/interfaces/execution-policy.interface.ts เพื่อให้สามารถใช้งานข้อมูลเกี่ยวกับนโยบายการทำงานของ AI ได้อย่างถูกต้อง",
+ "tags": [
+ "dto",
+ "ai-job",
+ "data-transfer-object"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/delete-audit-logs.dto.ts",
+ "type": "file",
+ "name": "delete-audit-logs.dto.ts",
+ "filePath": "modules/ai/dto/delete-audit-logs.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการลบประวัติการทำงานของระบบ AI โดยมีคลาสชื่อ DeleteAuditLogsQueryDto ใช้รับค่าที่ผู้ใช้งานป้อนเข้ามาเพื่อกำหนดเงื่อนไขในการลบรายการประวัติงาน",
+ "tags": [
+ "dto",
+ "ai-module",
+ "audit-logs"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/extract-document.dto.ts",
+ "type": "file",
+ "name": "extract-document.dto.ts",
+ "filePath": "modules/ai/dto/extract-document.dto.ts",
+ "summary": "คลาส ExtractDocumentDto เป็นโครงสร้างข้อมูล (DTO) สำหรับใช้ในการดึงเอกสารจากระบบ โดยมีจุดประสงค์เพื่อให้แน่ใจว่าข้อมูลที่รับเข้ามาในรูปแบบที่ถูกต้องและสอดคล้องกับมาตรฐานของโมดูล AI เน้นความชัดเจนในการแปลงข้อมูลจากเอกสารเป็นโครงสร้างที่สามารถประมวลผลได้โดยระบบอัจฉริยะ",
+ "tags": [
+ "dto",
+ "ai-module",
+ "document-extraction"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/legacy-migration.dto.ts",
+ "type": "file",
+ "name": "legacy-migration.dto.ts",
+ "filePath": "modules/ai/dto/legacy-migration.dto.ts",
+ "summary": "ไฟล์นี้จัดเก็บโครงสร้างข้อมูลสำหรับการย้ายระบบ AI จากรูปแบบเดิมมาสู่รูปแบบใหม่ โดยประกอบด้วยคลาสต่าง ๆ เช่น LegacyMigrationRecordDto, LegacyMigrationIngestDto และ ApproveLegacyMigrationDto ที่ใช้ในการจัดเก็บข้อมูลเฉพาะทางสำหรับแต่ละขั้นตอนของการย้ายระบบ",
+ "tags": [
+ "dto",
+ "ai-migration",
+ "legacy-system"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/dto/migration-query.dto.ts",
+ "type": "file",
+ "name": "migration-query.dto.ts",
+ "filePath": "modules/ai/dto/migration-query.dto.ts",
+ "summary": "คลาส MigrationQueryDto ใช้สำหรับกำหนดโครงสร้างข้อมูลในการย้ายข้อมูล (migrate data) โดยเฉพาะอย่างยิ่งในบริบทของระบบ AI มีจุดประสงค์เพื่อให้มั่นใจว่าข้อมูลที่ส่งเข้ามาจะมีรูปแบบและประเภทข้อมูลตรงตามมาตรฐาน",
+ "tags": [
+ "dto",
+ "migration",
+ "ai",
+ "data-transfer"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/migration-queue-item.dto.ts",
+ "type": "file",
+ "name": "migration-queue-item.dto.ts",
+ "filePath": "modules/ai/dto/migration-queue-item.dto.ts",
+ "summary": "DTO สำหรับกำหนดโครงสร้างข้อมูลรายการย้ายข้อมูลในคิว โดยใช้ในการส่งผ่านระหว่างบริการและ controller เพื่อให้มั่นใจว่ารูปแบบข้อมูลถูกต้อง",
+ "tags": [
+ "dto",
+ "migration-queue"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/migration-update.dto.ts",
+ "type": "file",
+ "name": "migration-update.dto.ts",
+ "filePath": "modules/ai/dto/migration-update.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการอัปเดตระบบย้ายฐานข้อมูล โดยมีคลาส MigrationUpdateDto ที่ใช้ในการจัดรูปแบบข้อมูลที่ส่งผ่านระหว่างชั้นต่าง ๆ เช่น จาก frontend สู่ backend",
+ "tags": [
+ "dto",
+ "migration",
+ "ai"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/ocr-engine-response.dto.ts",
+ "type": "file",
+ "name": "ocr-engine-response.dto.ts",
+ "filePath": "modules/ai/dto/ocr-engine-response.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับตอบกลับผลลัพธ์จากเครื่องมือ OCR เช่น Tesseract หรือ Typhoon โดยเก็บค่าความแม่นยำ, เวลาประมวลผล และสถานะการทำงาน",
+ "tags": [
+ "dto",
+ "ocr-response"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/submit-ai-job.dto.ts",
+ "type": "file",
+ "name": "submit-ai-job.dto.ts",
+ "filePath": "modules/ai/dto/submit-ai-job.dto.ts",
+ "summary": "ไฟล์นี้เป็นโครงสร้างข้อมูลสำหรับการส่งงาน AI โดยมีคลาสหรือ DTO หลายตัว เช่น TagOptionDto, MigrationContextOverrideDto และ MigrateDocumentPayloadDto ที่ใช้ในการจัดรูปแบบข้อมูลนำเข้าและผลลัพธ์ของระบบ AI นอกจากนี้ยังมี SubmitAiJobDto เพื่อเก็บรายละเอียดการส่งงาน AI โดยรวมไว้อย่างเป็นระเบียบ",
+ "tags": [
+ "dto",
+ "ai-job",
+ "data-transfer-object"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "file",
+ "filePath": "modules/ai/entities/ai-audit-log.entity.ts",
+ "name": "ai-audit-log.entity.ts",
+ "summary": "Entity สำหรับบันทึกเหตุการณ์การทำงานของระบบ AI เช่น การเรียกใช้งานเครื่องมือใดๆ เพื่อตรวจสอบและตามเชื้อเพลิงได้",
+ "tags": [
+ "entity",
+ "audit-log"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/entities/ai-execution-profile.entity.ts",
+ "type": "file",
+ "name": "ai-execution-profile.entity.ts",
+ "filePath": "modules/ai/entities/ai-execution-profile.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลโปรไฟล์การประมวลผล AI โดยเฉพาะในสภาพแวดล้อมจริง (production) เพื่อใช้ในการกำหนดพฤติกรรมการทำงานของโมเดล AI",
+ "tags": [
+ "entity",
+ "ai-execution-profile"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/entities/ai-model-configuration.entity.ts",
+ "type": "file",
+ "name": "ai-model-configuration.entity.ts",
+ "filePath": "modules/ai/entities/ai-model-configuration.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับกำหนดโครงสร้างข้อมูลของโมเดล AI โดยมีคลาสชื่อ AiModelConfiguration ใช้ในการจัดเก็บและจัดการข้อมูลเฉพาะทางที่เกี่ยวข้องกับการตั้งค่าโมเดล AI",
+ "tags": [
+ "entity",
+ "ai-model-configuration"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/entities/ai-sandbox-profile.entity.ts",
+ "type": "file",
+ "name": "ai-sandbox-profile.entity.ts",
+ "filePath": "modules/ai/entities/ai-sandbox-profile.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลโปรไฟล์การทดสอบ AI ในสภาพแวดล้อมต้นแบบ (sandbox) เพื่อใช้ในการพัฒนาและทดลองนโยบายก่อนนำไปใช้งานจริง",
+ "tags": [
+ "entity",
+ "ai-sandbox-profile"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/entities/migration-log.entity.ts",
+ "type": "file",
+ "name": "migration-log.entity.ts",
+ "filePath": "modules/ai/entities/migration-log.entity.ts",
+ "summary": "ไฟล์นี้สร้าง Entity สำหรับจัดเก็บข้อมูลประวัติการย้ายโครงสร้างฐานข้อมูล (Migration Log) โดยมีการนำเข้าจาก common/entities/uuid-base.entity.ts เพื่อใช้ระบุ ID เอกภพ และกำหนดค่าสถานะของการย้ายโครงสร้าง เช่น pending, completed ฯลฯ",
+ "tags": [
+ "entity",
+ "migration-log",
+ "ai-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/entities/ocr-engine-configuration.entity.ts",
+ "type": "file",
+ "name": "ocr-engine-configuration.entity.ts",
+ "filePath": "modules/ai/entities/ocr-engine-configuration.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บการตั้งค่าของเครื่องมือ OCR เช่น พารามิเตอร์การทำงาน, เวลาหมดอายุ และนโยบายการใช้งานแต่ละเครื่องมือ",
+ "tags": [
+ "ocr-configuration",
+ "engine-setting"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/guards/ai-enabled.guard.ts",
+ "type": "file",
+ "name": "ai-enabled.guard.ts",
+ "filePath": "modules/ai/guards/ai-enabled.guard.ts",
+ "summary": "คือการป้องกัน (guard) ที่ตรวจสอบว่าผู้ใช้งานมีสิทธิ์เข้าถึงฟังก์ชัน AI หรือไม่ โดยอ้างอิงจากข้อมูลใน user.entity และตั้งค่าของระบบ AI จาก ai-settings.service",
+ "tags": [
+ "guard",
+ "ai-access-control",
+ "security",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/guards/service-account.guard.ts",
+ "type": "file",
+ "name": "service-account.guard.ts",
+ "filePath": "modules/ai/guards/service-account.guard.ts",
+ "summary": "คือการป้องกัน (guard) ที่ตรวจสอบว่าผู้ใช้งานมีสิทธิ์เข้าถึงบริการ AI โดยเฉพาะอย่างยิ่งเมื่อมีการเชื่อมต่อหรือใช้บัญชีบริการของระบบได้อย่างเหมาะสม",
+ "tags": [
+ "guard",
+ "authentication",
+ "ai-service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "file",
+ "name": "execution-policy.interface.ts",
+ "filePath": "modules/ai/interfaces/execution-policy.interface.ts",
+ "summary": "อินเตอร์เฟซที่กำหนดนโยบายการประมวลผล เช่น การเลือกเครื่องมือ OCR, ลำดับความสำคัญของงาน และข้อจำกัดด้านทรัพยากร",
+ "tags": [
+ "execution-policy",
+ "ai-policies"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/interfaces/ocr-residency.interface.ts",
+ "type": "file",
+ "name": "ocr-residency.interface.ts",
+ "filePath": "modules/ai/interfaces/ocr-residency.interface.ts",
+ "summary": "อินเตอร์เฟซสำหรับกำหนดพฤติกรรมการใช้งานทรัพยากรของ OCR เช่น เวลาที่เครื่องมือควรทำงาน, การจัดเก็บผลลัพธ์ชั่วคราว และนโยบายการรีเรนด์",
+ "tags": [
+ "ocr-residency",
+ "resource-policy"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/processors/ai-batch.processor.ts",
+ "type": "file",
+ "name": "ai-batch.processor.ts",
+ "filePath": "modules/ai/processors/ai-batch.processor.ts",
+ "summary": "คลาส AiBatchProcessor เป็นตัวจัดการกระบวนการประมวลผลเอกสารจำนวนมาก โดยมีหน้าที่รับข้อมูลจากผู้ใช้ แยกประเภทและเตรียมข้อมูลสำหรับ AI และ OCR เพื่อให้ออกแบบโครงสร้าง JSON ได้อย่างเหมาะสม มีฟังก์ชันต่าง ๆ เช่น การลบเครื่องหมายควบคุม การแปลงรายการเป็นรูปแบบที่ใช้งานได้ และการประมวลผลเอกสารย้ายประเภท (migrate) โดยทำงานผ่านหลายขั้นตอน เช่น การเตรียม Rag, OCR Extract, และการจัดเก็บ log สำหรับตรวจสอบการทำงาน",
+ "tags": [
+ "ai-processing",
+ "ocr-extraction",
+ "document-migration",
+ "batch-operation"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/ai/processors/ai-realtime.processor.ts",
+ "type": "file",
+ "name": "ai-realtime.processor.ts",
+ "filePath": "modules/ai/processors/ai-realtime.processor.ts",
+ "summary": "คลาส AiRealtimeProcessor เป็นตัวจัดการกระบวนการประมวลผลข้อมูลแบบเรียลไทม์ โดยใช้ OCR และ Ollama เพื่อวิเคราะห์เนื้อหาจากไฟล์แนบและสร้างคำแนะนำตามประเภทต่าง ๆ มีเมธอดหลัก เช่น process(), parseSuggestion() และ flagUnknownCategories() ที่ช่วยในการแยกแยะหมวดหมู่ข้อมูล โดยใช้งานระบบคิวเพื่อกำหนดสถานะการทำงานของ AI",
+ "tags": [
+ "ai-processing",
+ "realtime-analysis",
+ "ocr-integration",
+ "ollama-service",
+ "queue-management"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/processors/rag.processor.ts",
+ "type": "file",
+ "name": "rag.processor.ts",
+ "filePath": "modules/ai/processors/rag.processor.ts",
+ "summary": "คลาส AiRagProcessor ใช้จัดการกระบวนการประมวลผลข้อมูลด้วย AI โดยอาศัยระบบ очередิ่ง (queue) และบริการ Rag เพื่อให้สามารถเรียกใช้งานได้อย่างมีประสิทธิภาพ มีเมธอดหลัก ๆ เช่น process(), abortJob() และ callback เมธอดสำหรับจัดการสถานะการทำงาน",
+ "tags": [
+ "ai-processing",
+ "rag-service",
+ "queue-handler",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/processors/typhoon-llm.processor.ts",
+ "type": "file",
+ "name": "typhoon-llm.processor.ts",
+ "filePath": "modules/ai/processors/typhoon-llm.processor.ts",
+ "summary": "คลาส TyphoonLlmProcessor ใช้จัดการกระบวนการประมวลผลคำขอจากโมเดล AI โดยอาศัย LLM จาก Typhoon เป็นแกนหลัก มีเมธอด process เพื่อเรียกใช้งานโมเดลดังกล่าว และมีหน้าที่บันทึกผลลัพธ์ลงฐานข้อมูลผ่าน saveResult เสมือนเช่นเดียวกับการเขียน log สำหรับตรวจสอบการทำงาน",
+ "tags": [
+ "ai-processing",
+ "llm-integration",
+ "typhoon-llm"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/services/ocr.service.ts",
+ "type": "file",
+ "name": "ocr.service.ts",
+ "filePath": "modules/ai/services/ocr.service.ts",
+ "summary": "บริการหลักสำหรับการทำงาน OCR โดยใช้โมเดล AI เพื่อแปลงภาพเอกสารเป็นข้อความ มีโครงสร้างพื้นฐานที่รองรับการประมวลผลหลายประเภทของเอกสาร",
+ "tags": [
+ "ocr-service",
+ "ai-processing",
+ "document-to-text"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/services/ollama.service.ts",
+ "type": "file",
+ "name": "ollama.service.ts",
+ "filePath": "modules/ai/services/ollama.service.ts",
+ "summary": "คลาส OllamaService จัดการการทำงานกับโมเดล AI จาก Ollama โดยรองรับการสร้างข้อความ (generate), การแปลงภาพเป็นข้อความด้วย OCR, และการสร้างเวกเตอร์สำหรับค้นหาข้อมูล อีกทั้งยังมีฟังก์ชันตรวจสอบสุขภาพระบบและโหลด/ปล่อยโมเดลเพื่อจัดการหน่วยความจำ",
+ "tags": [
+ "ai-service",
+ "ollama-client",
+ "ocr-model",
+ "embedding-generation",
+ "health-check"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/common/constants/queue.constants.ts",
+ "type": "file",
+ "name": "QueueConstants",
+ "filePath": "modules/common/constants/queue.constants.ts",
+ "summary": "ไฟล์คงที่สำหรับกำหนดค่าต่าง ๆ ของระบบ очеред (queue) เช่น queue name, retry limits และ timeout เพื่อใช้ในการส่งงานให้อินเทอร์เฟซ AI โดยบริการ FileStorageService จะอ้างอิงจากไฟล์นี้เพื่อกำหนดพฤติกรรมการทำงาน",
+ "tags": [
+ "constants",
+ "queue-config"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "type": "file",
+ "name": "typhoon-ocr.processor.ts",
+ "filePath": "modules/ai/processors/typhoon-ocr.processor.ts",
+ "summary": "คลาส TyphoonOcrProcessor ใช้จัดการกระบวนการ OCR โดยอาศัยโมเดล Typhoon เพื่อแปลงภาพเป็นข้อความ จากนั้นเก็บผลลัพธ์ลงในระบบและบันทึกเหตุการณ์การทำงานไว้ในฐานข้อมูล",
+ "tags": [
+ "ocr-processing",
+ "ai-processor",
+ "typhoon-model"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/services/ocr-cache.service.ts",
+ "type": "file",
+ "name": "ocr-cache.service.ts",
+ "filePath": "modules/ai/services/ocr-cache.service.ts",
+ "summary": "บริการสำหรับจัดเก็บและดึงข้อมูล OCR ที่เคยประมวลผลแล้ว เพื่อลดภาระการทำงานซ้ำ ๆ และเพิ่มประสิทธิภาพระบบโดยเฉพาะในกรณีเอกสารเดียวกัน",
+ "tags": [
+ "ocr-cache",
+ "performance-optimization"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/services/sandbox-ocr-engine.service.ts",
+ "type": "file",
+ "name": "sandbox-ocr-engine.service.ts",
+ "filePath": "modules/ai/services/sandbox-ocr-engine.service.ts",
+ "summary": "บริการสำหรับตรวจจับและดึงข้อมูลจากเอกสารผ่าน OCR โดยใช้โมเดลเฉพาะทางในสภาพแวดล้อมทดลอง (sandbox) มีเมธอดหลักคือ detectAndExtract ที่รับภาพหน้าจอเป็นอินพุต และส่งกลับข้อความหรือข้อมูลที่ดึงได้",
+ "tags": [
+ "ocr-service",
+ "ai-engine",
+ "sandbox-mode",
+ "document-processing"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/services/vram-monitor.service.ts",
+ "type": "file",
+ "name": "vram-monitor.service.ts",
+ "filePath": "modules/ai/services/vram-monitor.service.ts",
+ "summary": "บริการตรวจสอบสถานะหน่วยความจำ VRAM โดยมีเมธอดสำหรับดึงข้อมูลส่วนเกิน (headroom), ตรวจสอบสถานะใช้งาน, และตรวจจับว่ามีพื้นที่ความจำเพียงพอหรือไม่ นอกจากนี้ยังรองรับการล้างแคชข้อมูลภายในเมื่อต้องการ",
+ "tags": [
+ "service",
+ "vram-monitoring",
+ "memory-check"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/processors/vector-deletion.processor.ts",
+ "type": "file",
+ "name": "vector-deletion.processor.ts",
+ "filePath": "modules/ai/processors/vector-deletion.processor.ts",
+ "summary": "คลาส AiVectorDeletionProcessor ใช้จัดการกระบวนการลบเวกเตอร์จากฐานข้อมูล Qdrant โดยผ่านระบบคิวงาน (queue) และเชื่อมต่อกับบริการ AI เพื่อให้งานสามารถประมวลผลได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "ai-processing",
+ "vector-deletion",
+ "qdr-operations",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/qdrant.service.ts",
+ "type": "file",
+ "name": "qdrant.service.ts",
+ "filePath": "modules/ai/qdrant.service.ts",
+ "summary": "ส่วนประกอบของระบบ qdrant.service.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/prompts/ai-prompts.module.ts",
+ "type": "file",
+ "name": "ai-prompts.module.ts",
+ "filePath": "modules/ai/prompts/ai-prompts.module.ts",
+ "summary": "โมดูลนี้สร้างขึ้นเพื่อจัดการและกำหนดโครงสร้างการทำงานของระบบ AI prompts โดยมีหน้าที่เชื่อมโยงระหว่าง controller, service และ entity เพื่อให้งานต่าง ๆ สามารถทำงานร่วมกันได้อย่างเป็นระเบียบ",
+ "tags": [
+ "module",
+ "ai-prompts",
+ "nestjs-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/services/ai-policy.service.ts",
+ "type": "file",
+ "name": "ai-policy.service.ts",
+ "filePath": "modules/ai/services/ai-policy.service.ts",
+ "summary": "บริการสำหรับจัดการนโยบาย AI เช่น การกำหนดลำดับความสำคัญของงาน, การจำกัดทรัพยากร และการควบคุมการทำงานร่วมกันระหว่างโมดูลต่าง ๆ",
+ "tags": [
+ "ai-policy-service",
+ "policy-engine"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/services/embedding.service.ts",
+ "type": "file",
+ "name": "embedding.service.ts",
+ "filePath": "modules/ai/services/embedding.service.ts",
+ "summary": "บริการสำหรับจัดทำ embedding จากเอกสารต่าง ๆ โดยใช้โมเดล Ollama และ Qdrant เพื่อเก็บข้อมูลในฐานข้อมูล รวมถึงมีฟังก์ชันแยกข้อความเป็น chunk และประมวลผลคำสั่งตามโครงสร้างเฉพาะ",
+ "tags": [
+ "embedding",
+ "ai-service",
+ "chunking",
+ "semantic-search"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/services/migration.service.ts",
+ "type": "file",
+ "name": "migration.service.ts",
+ "filePath": "modules/ai/services/migration.service.ts",
+ "summary": "คลาส MigrationService เป็นบริการหลักสำหรับจัดการกระบวนการย้ายข้อมูล (migration) โดยรองรับการทำงานกับคิวตรวจสอบ (queue), การอนุมัติ และปฏิเสธรายการย้ายข้อมูล ใช้ Entity เช่น migration-review.entity เพื่อเก็บสถานะการดำเนินงาน",
+ "tags": [
+ "service",
+ "migration",
+ "ai-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/audit-log/audit-log.module.ts",
+ "type": "file",
+ "name": "audit-log.module.ts",
+ "filePath": "modules/audit-log/audit-log.module.ts",
+ "summary": "โมดูลสำหรับจัดการบันทึกเหตุการณ์ (Audit Log) โดยสร้างคลาส AuditLogModule ซึ่งใช้ในการลงทะเบียนบริการและควบคุมการทำงานของระบบตามหลักสถาปัตยกรรม NestJS",
+ "tags": [
+ "module",
+ "audit-log",
+ "nestjs"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/response-code/services/audit.service.ts",
+ "type": "file",
+ "name": "audit.service.ts",
+ "filePath": "modules/response-code/services/audit.service.ts",
+ "summary": "บริการสำหรับจัดการเหตุการณ์การตรวจสอบระบบ (Audit) โดยบันทึกข้อมูลเมื่อมีการเปลี่ยนแปลงค่า Response Code ลงในฐานข้อมูลเพื่อให้สามารถดูตามเวลาได้อย่างแม่นยำ",
+ "tags": [
+ "service",
+ "audit"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/workers/cleanup-temp-files.worker.ts",
+ "type": "file",
+ "name": "cleanup-temp-files.worker.ts",
+ "filePath": "modules/ai/workers/cleanup-temp-files.worker.ts",
+ "summary": "คลาส CleanupTempFilesWorker ใช้จัดการงานลบไฟล์ชั่วคราวที่เก็บไว้ในระบบ โดยมีหน้าที่ตรวจสอบรายการไฟล์ที่ยังไม่มีการอ้างอิง และดำเนินการลบออกเมื่อมีข้อผิดพลาดหรือสิ้นสุดการทำงานของโมดูล อัตโนมัติเพื่อลดพื้นที่จัดเก็บ",
+ "tags": [
+ "worker",
+ "cleanup",
+ "temp-files",
+ "background-task"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "file",
+ "name": "attachment.entity.ts",
+ "filePath": "common/file-storage/entities/attachment.entity.ts",
+ "summary": "คลาสสำหรับจัดการไฟล์แนบในระบบ โดยมีโครงสร้างเพื่อเก็บข้อมูลเฉพาะเจาะจงของไฟล์ที่ถูกแนบไว้ เช่น ชื่อไฟล์, เวลาอัปโหลด และ path",
+ "tags": [
+ "attachment",
+ "file-storage"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "entity",
+ "name": "correspondence.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence.entity.ts",
+ "summary": "ส่วนประกอบของข้อมูลจดหมายหรือการสื่อสารระหว่างผู้ใช้งานภายในระบบ",
+ "tags": [
+ "entity",
+ "correspondence"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "file",
+ "name": "correspondence-recipient.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "summary": "ส่วนประกอบของผู้รับเอกสารการสื่อสาร โดยเก็บข้อมูลรายละเอียดของบุคคลหรือหน่วยงานที่ได้รับเอกสารนั้นไปใช้งาน",
+ "tags": [
+ "entity",
+ "recipient"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "type": "file",
+ "name": "correspondence-revision-attachment.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บไฟล์แนบประกอบกับฉบับแก้ไขเอกสารสื่อสาร เช่น เอกสารแนบเพิ่มเติมหรือรูปภาพประกอบ",
+ "tags": [
+ "attachment",
+ "correspondence-revision"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "file",
+ "name": "correspondence-revision.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence-revision.entity.ts",
+ "summary": "ส่วนประกอบของประวัติการแก้ไขเอกสาร การเปลี่ยนแปลงเนื้อหาหรือรูปแบบเอกสารในแต่ละเวอร์ชัน",
+ "tags": [
+ "entity",
+ "revision"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "file",
+ "name": "correspondence-status.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence-status.entity.ts",
+ "summary": "ส่วนประกอบของสถานะเอกสาร เช่น รอการตรวจสอบ, ส่งออกสำเร็จ เป็นต้น โดยใช้ในการควบคุมลำดับขั้นตอนการทำงาน",
+ "tags": [
+ "entity",
+ "status"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/correspondence.module.ts",
+ "type": "file",
+ "name": "correspondence.module.ts",
+ "filePath": "modules/correspondence/correspondence.module.ts",
+ "summary": "ไฟล์โค้ดระบบ correspondence.module.ts",
+ "tags": [
+ "utility",
+ "barrel"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/due-date-reminder.service.ts",
+ "type": "file",
+ "name": "due-date-reminder.service.ts",
+ "filePath": "modules/correspondence/due-date-reminder.service.ts",
+ "summary": "บริการสำหรับส่งคำเตือนเรื่องกำหนดเวลาครบถ้วนของเอกสาร โดยใช้ข้อมูลจาก entities และเชื่อมต่อกับบริการแจ้งเตือนผู้ใช้งานเพื่อให้สามารถส่งข้อความเตือนได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "service",
+ "reminder",
+ "due-date",
+ "notification"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/correspondence/entities/cor-respondence.entity.ts",
+ "type": "file",
+ "name": "correspondence.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของ Entity สำหรับจดหมาย โดยมีชื่อคลาสเป็น Correspondence และใช้ร่วมกับผู้รับจดหมายเพื่อสนับสนุนการทำงานในโมดูล correspondence",
+ "tags": [
+ "entity",
+ "correspondence"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-reference.entity.ts",
+ "type": "file",
+ "name": "correspondence-reference.entity.ts",
+ "filePath": "modules/correspondence/entities/corresponding-reference.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับจัดการข้อมูลอ้างอิงเอกสารสื่อสาร โดยมีคลาส CorrespondenceReference ที่ใช้แทนความสัมพันธ์ระหว่างเอกสารต้นฉบับกับเอกสารอ้างอิง",
+ "tags": [
+ "entity",
+ "correspondence-reference",
+ "database-model"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-routing.entity.ts",
+ "type": "file",
+ "name": "correspondence-routing.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence-routing.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับจัดการข้อมูลการส่งต่อเอกสาร (Correspondence Routing) โดยมีความเกี่ยวข้องกับองค์กรและผู้ใช้งานทั้งในระบบ การกำหนดโครงสร้างของ routing template และ revision history เน้นการทำงานร่วมกับ entity อื่นๆ เช่น organization, user และ correspondence-revision",
+ "tags": [
+ "entity",
+ "correspondence-routing",
+ "routing-template",
+ "organization",
+ "user"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-sub-type.entity.ts",
+ "type": "file",
+ "name": "correspondence-sub-type.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence-sub-type.entity.ts",
+ "summary": "Entity สำหรับจัดการประเภทย่อยของเอกสารส่งต่อ (Correspondence Sub-Type)",
+ "tags": [
+ "entity",
+ "correspondence"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-tag.entity.ts",
+ "type": "file",
+ "name": "correspondence-tag.entity.ts",
+ "filePath": "modules/correspondence/entities/corresponding-tag.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับจัดการข้อมูลประเภทป้ายกำกับ (tag) ในระบบสื่อสารระหว่างหน่วยงาน โดยมีความเกี่ยวข้องโดยตรงกับเอกสารและรายการติดตาม ส่งผลให้สามารถจัดหมวดหมู่เนื้อหาได้อย่างชัดเจน",
+ "tags": [
+ "entity",
+ "correspondence",
+ "tag-management"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "file",
+ "name": "correspondence-type.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence-type.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลประเภทเอกสาร เช่น การส่งต่อภายในองค์กรหรือภายนอก โดยใช้ในกระบวนการกำหนดรูปแบบเลขที่เอกสารตามประเภทนี้",
+ "tags": [
+ "entity",
+ "correspondence-type"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/entities/routing-template-step.entity.ts",
+ "type": "file",
+ "name": "routing-template-step.entity.ts",
+ "filePath": "modules/correspond-ence/entities/routing-template-step.entity.ts",
+ "summary": "คลาส RoutingTemplateStep เป็น Entity สำหรับจัดการข้อมูลขั้นตอนในการกำหนดเส้นทางของเอกสาร โดยมีโครงสร้างเพื่อเก็บข้อมูลเชิงลึกเกี่ยวกับแต่ละขั้นตอน เช่น เงื่อนไข การดำเนินงาน และสถานะต่าง ๆ ที่จำเป็นสำหรับการจัดลำดับการทำงานของเอกสาร",
+ "tags": [
+ "entity",
+ "routing-template-step"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/correspondence/entities/routing-template.entity.ts",
+ "type": "file",
+ "name": "routing-template.entity.ts",
+ "filePath": "modules/corresponding/entities/routing-template.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของ Entity ชื่อ RoutingTemplate โดยใช้เครื่องมือ ORM เพื่อกำหนดความสัมพันธ์และคุณสมบัติของข้อมูลที่เกี่ยวข้องกับการจัดลำดับการส่งเอกสาร",
+ "tags": [
+ "entity",
+ "orm",
+ "routing-template"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "type": "file",
+ "filePath": "modules/distribution/services/transmittal-creator.service.ts",
+ "name": "transmittal-creator.service.ts",
+ "summary": "บริการสร้างเอกสารโอนส่ง (Transmittal) สำหรับใช้ในการกระจายข้อมูลไปยังหน่วยงานปลายทาง",
+ "tags": [
+ "service",
+ "transmittal"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/common/enums/review.enums.ts",
+ "type": "file",
+ "filePath": "modules/common/enums/review.enums.ts",
+ "name": "review.enums.ts",
+ "summary": "ไฟล์กำหนดค่า enum สำหรับประเภทการตรวจสอบงานในระบบ โดยใช้ในการควบคุมพฤติกรรมของกระบวนการตรวจสอบและ override",
+ "tags": [
+ "enum",
+ "review"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "type": "file",
+ "name": "distribution-matrix.entity.ts",
+ "filePath": "modules/distribution/entities/distribution-matrix.entity.ts",
+ "summary": "Entity สำหรับจัดการตารางการกระจายสินค้า โดยเก็บข้อมูลรายละเอียดเช่น อัตราส่วนการแจกแจง ส่งมอบให้ใคร และเวลาที่กำหนดไว้",
+ "tags": [
+ "distribution-matrix",
+ "matrix-entity"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "type": "file",
+ "name": "distribution-recipient.entity.ts",
+ "filePath": "modules/distribution/entities/distribution-recipient.entity.ts",
+ "summary": "ไฟล์นี้สร้าง Entity สำหรับจัดการข้อมูลผู้รับการกระจายสินค้า โดยมีโครงสร้างพื้นฐานจาก UUIDBaseEntity และรวมฟิลด์ที่เกี่ยวข้องกับการแจกแจง เช่น การเชื่อมโยงกับ DistributionMatrix เพื่อระบุรายละเอียดการจัดสรร",
+ "tags": [
+ "entity",
+ "distribution",
+ "recipient",
+ "uuid-base"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/circulation/entities/circulation-status-code.entity.ts",
+ "type": "file",
+ "name": "circulation-status-code.entity.ts",
+ "filePath": "modules/circulation/entities/circulation-status-code.entity.ts",
+ "summary": "คลาสที่ใช้จัดเก็บสถานะต่าง ๆ ของการเคลื่อนย้ายเอกสาร เช่น ส่งเรียบร้อย เริ่มดำเนินการแล้ว เป็นต้น เพื่อให้สามารถตรวจสอบขั้นตอนการทำงานได้ง่าย",
+ "tags": [
+ "status-code",
+ "circulation-status"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/entities/document-number-format.entity.ts",
+ "type": "entity",
+ "name": "document-number-format.entity.ts",
+ "filePath": "modules/document-numbering/entities/document-number-format.entity.ts",
+ "summary": "Entity สำหรับเก็บข้อมูลรูปแบบหมายเลขเอกสาร เช่น เลขอ้างอิง พฤติกรรมการสร้างเลขลำดับ และโครงสร้างแม่แบบที่ใช้ในการจัดทำเอกสาร",
+ "tags": [
+ "entity",
+ "document-number-format"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/notification/notification.service.ts",
+ "type": "file",
+ "name": "notification.service.ts",
+ "filePath": "modules/notification/notification.service.ts",
+ "summary": "คลาส NotificationService เป็นบริการหลักสำหรับจัดการข้อความแจ้งเตือน โดยมีหน้าที่รับคำขอจาก controller และประสานงานกับ entity, dto และ gateway เพื่อประมวลผลและส่งข้อมูลไปยังผู้ใช้",
+ "tags": [
+ "service",
+ "notification",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/project/entities/project.entity.ts",
+ "type": "file",
+ "name": "project.entity.ts",
+ "filePath": "modules/project/entities/project.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลโครงการ เช่น เลขที่โครงการ โดยใช้ในบริการ format.service เพื่อแทนที่โค้ดโครงการ (project code) ในเลขที่เอกสาร",
+ "tags": [
+ "entity",
+ "project"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/dto/workflow-transition.dto.ts",
+ "type": "file",
+ "name": "workflow-transition.dto.ts",
+ "filePath": "modules/workflow-engine/dto/workflow-transition.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการเปลี่ยนแปลงสถานะ (transition) ใน workflow โดยระบุเงื่อนไขและเป้าหมายของ transition",
+ "tags": [
+ "dto",
+ "workflow-transition"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "file",
+ "name": "workflow-engine.service.ts",
+ "filePath": "modules/workflow-engine/workflow-engine.service.ts",
+ "summary": "บริการหลักสำหรับจัดการการทำงานของระบบ workflow โดยมีหน้าที่รับผิดชอบในการสร้างและปรับปรุง definition ต่าง ๆ การเรียกใช้งาน transition และ processAction เพื่อให้เกิดลำดับขั้นตอนตาม DSL schema อันได้แก่ validateDsl, createDefinition, update, getDefinitions, getInstanceById, getInstanceByEntity, evaluate, processTransition และการจัดการ history กับ attachment โดยเชื่อมโยงกับ entities เช่น workflow-definition.entity.ts, workflow-instance.entity.ts และ workflow-history.entity.ts",
+ "tags": [
+ "service",
+ "workflow-engine",
+ "dsl-validation",
+ "process-transition",
+ "instance-management"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "file",
+ "name": "rfa-revision.entity.ts",
+ "filePath": "modules/rfa/entities/rfa-revision.entity.ts",
+ "summary": "Entity สำหรับเก็บข้อมูลฉบับแก้ไขของเอกสาร RFA โดยแยกเฉพาะรายละเอียดแต่ละเวอร์ชันของการขออนุมัติ",
+ "tags": [
+ "entity",
+ "rfa-revision"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/entities/tag.entity.ts",
+ "type": "file",
+ "name": "tag.entity.ts",
+ "filePath": "modules/master/entities/tag.entity.ts",
+ "summary": "Entity สำหรับจัดการแท็ก (Tag) ที่ใช้ในการจัดกลุ่มเอกสาร",
+ "tags": [
+ "entity",
+ "master-data"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/entities/discipline.entity.ts",
+ "type": "file",
+ "name": "discipline.entity.ts",
+ "filePath": "modules/master/entities/discipline.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลสาขาต่าง ๆ เช่น การวิศวกรรม อุตสาหกรรม โดยใช้ในบริการ format.service เพื่อแทนที่โค้ดสาขา (discipline code) ในเลขที่เอกสาร",
+ "tags": [
+ "entity",
+ "discipline"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "file",
+ "name": "document-numbering.service.ts",
+ "filePath": "modules/document-numbering/services/document-numbering.service.ts",
+ "summary": "บริการหลักสำหรับจัดลำดับเลขที่เอกสาร โดยมีหน้าที่ในการสร้างเลขที่ต่อไป เก็บข้อมูลรезเวอร์ ตรวจสอบสถานะ และจัดการประวัติการใช้งานของเลขที่",
+ "tags": [
+ "service",
+ "document-numbering",
+ "reservation",
+ "audit-log"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/transmittal/entities/transmittal.entity.ts",
+ "type": "file",
+ "name": "transmittal.entity.ts",
+ "filePath": "modules/transmittal/entities/transmittal.entity.ts",
+ "summary": "ส่วนประกอบหลักของเอกสารส่งออก โดยเก็บข้อมูลทั้งหมดเกี่ยวกับการส่งเอกสาร เช่น ผู้ส่ง, เอกสารเดิม, และสถานะปัจจุบัน",
+ "tags": [
+ "entity"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/transmittal/entities/transmittal-item.entity.ts",
+ "type": "file",
+ "name": "transmittal-item.entity.ts",
+ "filePath": "modules/transmittal/entities/transmittal-item.entity.ts",
+ "summary": "ส่วนประกอบของรายการเอกสารที่ถูกรวมไว้ในเอกสารส่งออก เช่น จดหมายหรือไฟล์แนบต่าง ๆ โดยแต่ละรายการมีข้อมูลเฉพาะตัว",
+ "tags": [
+ "entity"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/dto/create-discipline.dto.ts",
+ "type": "file",
+ "name": "create-discipline.dto.ts",
+ "filePath": "modules/master/dto/create-discipline.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการสร้างสาขา (Discipline) ในระบบ",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/dto/create-sub-type.dto.ts",
+ "type": "file",
+ "name": "create-sub-type.dto.ts",
+ "filePath": "modules/master/dto/create-sub-type.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการสร้าง subtype ในระบบ",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/dto/create-tag.dto.ts",
+ "type": "file",
+ "name": "create-tag.dto.ts",
+ "filePath": "modules/master/dto/create-tag.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการสร้างแท็ก (Tag) ในระบบ",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/dto/save-number-format.dto.ts",
+ "type": "file",
+ "name": "save-number-format.dto.ts",
+ "filePath": "modules/master/dto/save-number-format.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการบันทึกแบบฟอร์แมตเลข (Number Format) ในระบบ",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/dto/search-tag.dto.ts",
+ "type": "file",
+ "name": "search-tag.dto.ts",
+ "filePath": "modules/master/dto/search-tag.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการค้นหาแท็ก (Tag) ในระบบ",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/dto/update-tag.dto.ts",
+ "type": "file",
+ "name": "update-tag.dto.ts",
+ "filePath": "modules/master/dto/update-tag.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการอัปเดตแท็ก (Tag) ในระบบ",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/master.controller.ts",
+ "type": "file",
+ "name": "master.controller.ts",
+ "filePath": "modules/master/master.controller.ts",
+ "summary": "Controller สำหรับจัดการ API เกี่ยวกับข้อมูลพื้นฐานของระบบ เช่น การดูรายละเอียดวิชาชีพและแท็ก",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/master/service/master.service.ts",
+ "type": "file",
+ "name": "master.service.ts",
+ "filePath": "modules/master/master.service.ts",
+ "summary": "Service สำหรับจัดการข้อมูลหลัก (Master Data) เช่น การดึงข้อมูลสาขา เอกสาร RFA และ subtype โดยใช้ repository และ DTOs",
+ "tags": [
+ "service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa-type.entity.ts",
+ "type": "file",
+ "name": "rfa-type.entity.ts",
+ "filePath": "modules/rfa/entities/rfa-type.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับประเภทของ RFA โดยใช้ในการกำหนดชนิดต่าง ๆ ของการรับรองเอกสาร เช่น การรับรองสิทธิประโยชน์ การรับรองประวัติศาสตร์ เป็นต้น",
+ "tags": [
+ "entity",
+ "rfa-type"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/master/master.module.ts",
+ "type": "file",
+ "name": "master.module.ts",
+ "filePath": "modules/master/master.module.ts",
+ "summary": "โมดูลหลักสำหรับจัดการข้อมูลพื้นฐานของระบบ โดยมีการนำเข้า Entity และ Service จากโมดูลอื่น ๆ เช่น discipline, tag, circulation-status-code เป็นต้น เพื่อให้สามารถใช้งานร่วมกันได้อย่างครบถ้วน",
+ "tags": [
+ "module",
+ "core-module",
+ "master-data"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/master/master.service.ts",
+ "type": "file",
+ "name": "master.service.ts",
+ "filePath": "modules/master/master.service.ts",
+ "summary": "บริการหลักสำหรับจัดการข้อมูลประเภทต่าง ๆ เช่น ประเภทเอกสาร การอนุมัติ RFA สภาพการไหลเวียน และวิชาชีพ โดยมีเมธอดรองที่ครอบคลุมการทำงาน CRUD (Create, Read, Update, Delete) เรื่องต่าง ๆ ในระบบ",
+ "tags": [
+ "service",
+ "master-data-management",
+ "crud-operations"
+ ],
+ "complexity": "complex"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa-approve-code.entity.ts",
+ "type": "file",
+ "name": "rfa-approve-code.entity.ts",
+ "filePath": "modules/rfa/entities/rfa-approve-code.entity.ts",
+ "summary": "Entity สำหรับเก็บรหัสการอนุมัติเอกสาร RFA โดยระบุประเภทและลำดับความสำคัญของการอนุมัติ",
+ "tags": [
+ "entity",
+ "rfa"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa-status-code.entity.ts",
+ "type": "file",
+ "name": "rfa-status-code.entity.ts",
+ "filePath": "modules/rfa/entities/rfa-status-code.entity.ts",
+ "summary": "Entity สำหรับเก็บรหัสสถานะของเอกสาร RFA เช่น ส่งแล้ว, เริ่มดำเนินการ, รออนุมัติ เป็นต้น",
+ "tags": [
+ "entity",
+ "rfa-status"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/migration/dto/commit-batch.dto.ts",
+ "type": "file",
+ "name": "commit-batch.dto.ts",
+ "filePath": "modules/migration/dto/commit-batch.dto.ts",
+ "summary": "โครงสร้างข้อมูล (DTO) สำหรับรับค่าจาก client เพื่อส่งคำขอให้ยืนยันชุดข้อมูลในครั้งเดียว โดยมีฟิลด์ที่เกี่ยวข้องกับการจัดกลุ่มรายการและตรวจสอบความถูกต้อง",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/migration/dto/import-correspondence.dto.ts",
+ "type": "file",
+ "name": "import-correspondence.dto.ts",
+ "filePath": "modules/migration/dto/import-correspondence.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการนำเข้าความสัมพันธ์ระหว่างรายการต่าง ๆ เช่น ผู้ใช้งานกับเอกสาร โดยระบุประเภทของความสัมพันธ์และค่าที่เกี่ยวข้อง",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/migration/dto/create-migration-error.dto.ts",
+ "type": "file",
+ "name": "create-migration-error.dto.ts",
+ "filePath": "modules/migration/dto/create-migration-error.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการสร้างข้อผิดพลาดในการย้ายข้อมูล โดยเก็บรายละเอียดของข้อผิดพลาด เช่น รหัสข้อผิดพลาด, เงื่อนไขที่เกิดปัญหา และข้อความอธิบาย",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/migration/dto/enqueue-migration.dto.ts",
+ "type": "file",
+ "name": "enqueue-migration.dto.ts",
+ "filePath": "modules/migration/dto/enqueue-migration.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการเพิ่มรายการย้ายข้อมูลลงในคิวตรวจสอบ โดยระบุประเภทของรายการและรายละเอียดที่ต้องตรวจสอบ",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/delegation/delegation.controller.ts",
+ "type": "file",
+ "name": "delegation.controller.ts",
+ "filePath": "modules/delegation/delegation.controller.ts",
+ "summary": "ควบคุมการรับคำขอและตอบสนองต่อ endpoint ที่เกี่ยวข้องกับหน้าที่มอบหมายงาน โดยเชื่อมโยงไปยัง service เพื่อประมวลผลตรรกะการทำงาน",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/delegation/delegation.service.ts",
+ "type": "file",
+ "filePath": "modules/delegation/delegation.service.ts",
+ "name": "delegation.service.ts",
+ "summary": "บริการจัดการการมอบหมายงาน (delegation) ซึ่งอาจถูกใช้ร่วมกับ task-creation เพื่อควบคุมลำดับหรือผู้รับผิดชอบของแต่ละงาน",
+ "tags": [
+ "service",
+ "delegation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/delegation/dto/create-delegation.dto.ts",
+ "type": "file",
+ "name": "create-delegation.dto.ts",
+ "filePath": "modules/delegation/dto/create-delegation.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการสร้างหน้าที่มอบหมายงาน โดยมีคลาส CreateDelegationDto ซึ่งใช้ในการรับค่าอินพุตจาก API request และประกอบด้วยฟิลด์ต่าง ๆ เช่น scope, assigneeId, reviewerIds เป็นต้น เพื่อให้มั่นใจว่าข้อมูลที่ส่งเข้ามาถูกต้องและครบถ้วน",
+ "tags": [
+ "dto",
+ "delegation",
+ "create-request"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "type": "file",
+ "name": "document-numbering-admin.controller.ts",
+ "filePath": "modules/document-number- ing/controllers/document-numbering-admin.controller.ts",
+ "summary": "คลาส DocumentNumberingAdminController ใช้จัดการ API endpoints เพื่อควบคุมเลขที่เอกสารต่าง ๆ โดยรองรับการทำงานแบบ admin-level เช่น การดึงข้อมูลแม่พิมพ์ (templates), เก็บหรือลบแม่พิมพ์, อัปเดตเมตริกส์, ใช้งาน override เพื่อแก้ไขเลขที่โดยตรง, void และแทนที่เอกสาร, cancel การออกเลขที่ โดยรวมถึงการนำเข้าข้อมูลจำนวนมาก (bulk import) มีการเชื่อมโยงกับ decorators เช่น current-user.decorator และ require-permission.decorator เพื่อรักษาความปลอดภัยในการเข้าถึง",
+ "tags": [
+ "controller",
+ "admin",
+ "document-numbering",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/controllers/document-numbering.controller.ts",
+ "type": "file",
+ "name": "document-numbering.controller.ts",
+ "filePath": "modules/document-number- ing/controllers/document-numbering.controller.ts",
+ "summary": "คลาส DocumentNumberingController ใช้จัดการ endpoint เพื่อควบคุมลำดับเลขเอกสาร โดยมีเมธอดต่าง ๆ เช่น การดึงประวัติตรวจสอบ (audit logs), เรียกข้อมูลลำดับเลข, อัปเดตตัวนับ และแสดงตัวอย่างเลขเอกสาร พร้อมใช้ decorator เพื่อควบคุมสิทธิ์การเข้าถึง",
+ "tags": [
+ "controller",
+ "document-numbering",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/dto/preview-number.dto.ts",
+ "type": "file",
+ "name": "preview-number.dto.ts",
+ "filePath": "modules/document-numbering/dto/preview-number.dto.ts",
+ "summary": "คลาส PreviewNumberDto เป็นโครงสร้างข้อมูลสำหรับใช้แสดงตัวอย่างเลขที่เอกสาร โดยมีจุดประสงค์เพื่อให้ผู้ใช้งานเห็นภาพรวมของเลขที่เอกสารก่อนการสร้างจริง",
+ "tags": [
+ "dto",
+ "document-numbering",
+ "preview"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/dto/manual-override.dto.ts",
+ "type": "file",
+ "name": "manual-override.dto.ts",
+ "filePath": "modules/document-numbering/dto/manual-override.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับรับค่าทับซ้อนเลขที่เอกสารแบบมือถือ โดยกำหนดค่าตัวแปร เช่น เลขที่เอกสาร ประเภทเอกสาร และวันที่",
+ "tags": [
+ "dto",
+ "document-numbering"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "type": "file",
+ "name": "asbuilt-drawing.controller.ts",
+ "filePath": "modules/drawing/asbuilt-drawing.controller.ts",
+ "summary": "คลาสควบคุม AsBuiltDrawingController ใช้จัดการ API endpoints เพื่อสร้างและดึงข้อมูลแบบวาดแผนตามสถานะจริง โดยมีเมธอดหลัก เช่น create(), createRevision(), findAll() และ remove() นอกจากนี้ยังนำเข้า decorator และ guard มาใช้เพื่อกำหนดสิทธิ์การเข้าถึงและการตรวจสอบความปลอดภัย",
+ "tags": [
+ "controller",
+ "api-handler",
+ "drawing-module",
+ "as-built-drawing"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "type": "file",
+ "name": "asbuilt-drawing.service.ts",
+ "filePath": "modules/drawing/asbuilt-drawing.service.ts",
+ "summary": "บริการสำหรับจัดการข้อมูลแบบดูแลงาน (As-Built Drawing) โดยมีหน้าที่สร้าง แก้ไข เก็บรักษา และค้นหาข้อมูลตามคำขอของผู้ใช้งาน มีการเชื่อมโยงกับโมเดลต่าง ๆ เช่น การจัดเก็บไฟล์แนบและข้อมูลผู้ใช้งาน",
+ "tags": [
+ "service",
+ "as-built-drawing",
+ "drawing-management"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/dto/create-asbuilt-drawing.dto.ts",
+ "type": "file",
+ "name": "create-asbuilt-drawing.dto.ts",
+ "filePath": "modules/drawing/dto/create-asbuilt-drawing.dto.ts",
+ "summary": "คลาส CreateAsBuiltDrawingDto ใช้สำหรับรับข้อมูลการสร้างแบบวาดแผนงานประกอบตามจริง โดยมีโครงสร้างชัดเจนเพื่อให้แน่ใจว่าข้อมูลที่ได้รับมาตรงกับความต้องการของระบบ",
+ "tags": [
+ "dto",
+ "drawing",
+ "as-built"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/dto/create-asbuilt-drawing-revision.dto.ts",
+ "type": "file",
+ "name": "create-asbuilt-drawing-revision.dto.ts",
+ "filePath": "modules/drawing/dto/create-asbuilt-drawing-revision.dto.ts",
+ "summary": "คลาส CreateAsBuiltDrawingRevisionDto ใช้สำหรับรับข้อมูลการสร้างฉบับอัปเดตแบบดูแลงาน (as-built drawing revision) โดยมีโครงสร้างชัดเจนเพื่อรับค่าต่าง ๆ เช่น เลขที่เวอร์ชัน การระบุผู้ใช้งาน และรายละเอียดของเอกสารประกอบการวิเคราะห์",
+ "tags": [
+ "dto",
+ "drawing",
+ "as-built"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/dto/search-asbuilt-drawing.dto.ts",
+ "type": "file",
+ "name": "search-asbuilt-drawing.dto.ts",
+ "filePath": "modules/drawing/dto/search-asbuilt-drawing.dto.ts",
+ "summary": "คลาส SearchAsBuiltDrawingDto ใช้สำหรับรับข้อมูลการค้นหาแบบดึงข้อมูลแผนผังงานประกอบ (as-built drawing) โดยมีโครงสร้างเพื่อจัดเก็บพารามิเตอร์ต่าง ๆ เช่น เลขที่โครงการ, ช่วงเวลาเริ่มต้น-สิ้นสุด และประเภทของแผนผังงาน เพื่อนำไปใช้งานในระบบค้นหา",
+ "tags": [
+ "dto",
+ "drawing-search",
+ "as-built"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/contract-drawing.controller.ts",
+ "type": "file",
+ "name": "contract-drawing.controller.ts",
+ "filePath": "modules/drawing/contract-drawing.controller.ts",
+ "summary": "คลาส Controller สำหรับจัดการข้อมูลแบบรูปแบบสัญญา โดยมีเมธอดรองสนับต่าง ๆ เช่น create, findAll, findOne, update และ remove เพื่อให้ผู้ใช้งานสามารถสร้าง อัปเดต เปลี่ยนแปลง หรือลบข้อมูลได้อย่างปลอดภัยและควบคุมสิทธิ์การเข้าถึงตามระดับบทบาท",
+ "tags": [
+ "controller",
+ "api-handler",
+ "middleware",
+ "authorization"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/contract-drawing.service.ts",
+ "type": "file",
+ "name": "contract-drawing.service.ts",
+ "filePath": "modules/drawing/contract-drawing.service.ts",
+ "summary": "บริการสำหรับจัดการข้อมูลแบบฟอร์มสัญญา โดยมีหน้าที่สร้าง ค้นหา อัปเดต และลบรายการแบบฟอร์มนี้ตามเงื่อนไขต่าง ๆ เช่น เลือกจากโครงการหรือ UUID",
+ "tags": [
+ "service",
+ "contract-drawing",
+ "crud-operation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/dto/create-contract-drawing.dto.ts",
+ "type": "file",
+ "name": "create-contract-drawing.dto.ts",
+ "filePath": "modules/drawing/dto/create-contract-drawing.dto.ts",
+ "summary": "คลาส CreateContractDrawingDto ใช้สำหรับกำหนดโครงสร้างข้อมูลในการสร้างแบบแปลงสัญญา โดยมีจุดประสงค์เพื่อให้มั่นใจว่าข้อมูลที่รับเข้ามาจะอยู่ในรูปแบบที่ถูกต้องและครบถ้วน",
+ "tags": [
+ "dto",
+ "contract-drawing",
+ "input-validation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/dto/search-contract-drawing.dto.ts",
+ "type": "file",
+ "name": "search-contract-drawing.dto.ts",
+ "filePath": "modules/drawing/dto/search-contract-drawing.dto.ts",
+ "summary": "คลาส SearchContractDrawingDto ใช้สำหรับรับข้อมูลการค้นหาแบบฟอร์มในการดึงข้อมูลแบบวาดแผนผังจากฐานข้อมูล โดยมีโครงสร้างที่ชัดเจนเพื่อรองรับการกรองและจัดเรียงผลลัพธ์ได้อย่างเหมาะสม",
+ "tags": [
+ "dto",
+ "search-dto",
+ "drawing"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/dto/update-contract-drawing.dto.ts",
+ "type": "file",
+ "name": "update-contract-drawing.dto.ts",
+ "filePath": "modules/drawing/dto/update-contract-drawing.dto.ts",
+ "summary": "คลาส UpdateContractDrawingDto ใช้สำหรับรับข้อมูลอัปเดตการวาดแบบแปลนสัญญา โดยมีโครงสร้างเฉพาะเจาะจงเพื่อรับค่าต่าง ๆ เช่น เลขที่แบบแปลน, ชื่อโครงการ และรายละเอียดอื่น ๆ อีกหลายประการ",
+ "tags": [
+ "dto",
+ "drawing",
+ "contract"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/shop-drawing.controller.ts",
+ "type": "file",
+ "name": "shop-drawing.controller.ts",
+ "filePath": "modules/drawing/shop-drawing.controller.ts",
+ "summary": "คลาส ShopDrawingController เป็น controller สำหรับจัดการข้อมูล shop drawing โดยมีเมธอดหลัก ๆ เช่น create, findAll, findOne และ createRevision เพื่อรองรับการทำงานต่าง ๆ เกี่ยวกับ shop drawing ในระบบ มีการใช้ decorator เช่น audit.decorator, current-user.decorator และ require-permission.decorator รวมถึง guard เช่น jwt-auth.guard และ rbac.guard เพื่อรักษาความปลอดภัยและบันทึกเหตุการณ์การทำงาน",
+ "tags": [
+ "controller",
+ "shop-drawing",
+ "api-handler",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/dto/create-shop-drawing.dto.ts",
+ "type": "file",
+ "name": "create-shop-drawing.dto.ts",
+ "filePath": "modules/drawing/dto/create-shop-drawing.dto.ts",
+ "summary": "คลาส CreateShopDrawingDto ใช้สำหรับรับข้อมูลการสร้างแบบวาดงานฝีมือ โดยกำหนดโครงสร้างของฟอร์มที่ต้องกรอก เช่น เลขที่, ชื่อโครงการ และรายละเอียดอื่นๆ เพื่อให้มั่นใจว่าข้อมูลเข้ามาถูกต้องและครบถ้วน",
+ "tags": [
+ "dto",
+ "drawing",
+ "shop-drawing"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/dto/create-shop-drawing-revision.dto.ts",
+ "type": "file",
+ "name": "create-shop-drawing-revision.dto.ts",
+ "filePath": "modules/drawing/dto/create-shop-drawing-revision.dto.ts",
+ "summary": "คลาส CreateShopDrawingRevisionDto ใช้สำหรับรับข้อมูลการสร้างฉบับแก้ไขแบบวาดภาพในโรงงาน โดยมีคุณสมบัติพื้นฐาน เช่น เลขอ้างอิง, ชื่อเรื่อง, และข้อมูลผู้เกี่ยวข้อง",
+ "tags": [
+ "dto",
+ "drawing",
+ "shop-drawing"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/dto/search-shop-drawing.dto.ts",
+ "type": "file",
+ "name": "search-shop-drawing.dto.ts",
+ "filePath": "modules/drawing/dto/search-shop-drawing.dto.ts",
+ "summary": "คลาส SearchShopDrawingDto ใช้สำหรับรับข้อมูลการค้นหาแผนผังร้านค้า โดยมีโครงสร้างที่ชัดเจนเพื่อให้แน่ใจว่าข้อมูลที่ส่งเข้ามาถูกต้องตามรูปแบบที่กำหนดไว้",
+ "tags": [
+ "dto",
+ "search",
+ "shop-drawing"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/shop-drawing.service.ts",
+ "type": "file",
+ "filePath": "modules/drawing/shop-drawing.service.ts",
+ "name": "shop-drawing.service.ts",
+ "summary": "บริการหลักสำหรับจัดการข้อมูลวาดภาพในร้านค้า โดยรองรับการทำงานต่าง ๆ เช่น การสร้าง แก้ไข และดูรายละเอียดของงานวาดภาพ",
+ "tags": [
+ "service",
+ "drawing"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/migration/dto/commit-migration-review.dto.ts",
+ "type": "file",
+ "name": "commit-migration-review.dto.ts",
+ "filePath": "modules/migration/dto/commit-migration-review.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการยืนยันผลการย้ายข้อมูล (Commit Migration Review) โดยกำหนดโครงสร้างของข้อมูลที่ต้องส่งเข้ามาเพื่อให้บริการตรวจสอบสามารถประมวลผลได้อย่างถูกต้อง",
+ "tags": [
+ "dto",
+ "migration-review"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/migration/migration-review.controller.ts",
+ "type": "file",
+ "name": "migration-review.controller.ts",
+ "filePath": "modules/migration/migration-review.controller.ts",
+ "summary": "คลาส MigrationReviewController ใช้จัดการ endpoint เพื่อรับคำขอให้อัปเดตข้อมูลการย้อนกลับ (rollback) และยืนยันการทำรายการ (commit) โดยเชื่อมโยงกับ service layer เพื่อประมวลผลข้อมูล การตรวจสอบสิทธิ์ผ่าน guard และ decorator ช่วยควบคุมการเข้าถึงตามบทบาทของผู้ใช้งาน",
+ "tags": [
+ "controller",
+ "middleware",
+ "api-handler",
+ "migration-review"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/migration/migration-review.service.ts",
+ "type": "file",
+ "name": "migration-review.service.ts",
+ "filePath": "modules/migration/migration-review.service.ts",
+ "summary": "บริการสำหรับจัดการกระบวนการตรวจสอบการย้ายข้อมูล (Migration Review) โดยมีหน้าที่สร้างและจัดเก็บรายการตรวจสอบ การยืนยันข้อมูล และอัปเดตสถานะของเอกสารตามลำดับชั้น",
+ "tags": [
+ "service",
+ "migration-review",
+ "correspondence-management"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/project/dto/create-project.dto.ts",
+ "type": "file",
+ "name": "create-project.dto.ts",
+ "filePath": "modules/project/dto/create-project.dto.ts",
+ "summary": "ส่วนประกอบของระบบ create-project.dto.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/project/dto/search-project.dto.ts",
+ "type": "file",
+ "name": "search-project.dto.ts",
+ "filePath": "modules/project/dto/search-project.dto.ts",
+ "summary": "ส่วนประกอบของระบบ search-project.dto.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/project/project.service.ts",
+ "type": "file",
+ "filePath": "modules/project/project.service.ts",
+ "name": "project.service.ts",
+ "summary": "Service สำหรับจัดการตรรกะการทำงานของโปรเจกต์ เช่น การสร้าง, อัปเดต และดึงข้อมูล โดยแยกจาก controller เพื่อเพิ่มความยืดหยุ่นและบำรุงรักษาได้ง่าย",
+ "tags": [
+ "service",
+ "business-logic"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/project/dto/update-project.dto.ts",
+ "type": "file",
+ "name": "update-project.dto.ts",
+ "filePath": "modules/project/dto/update-project.dto.ts",
+ "summary": "ส่วนประกอบของระบบ update-project.dto.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/project/project.controller.ts",
+ "type": "file",
+ "filePath": "modules/project/project.controller.ts",
+ "name": "project.controller.ts",
+ "summary": "Controller สำหรับจัดการ endpoint เกี่ยวกับโปรเจกต์ โดยรับคำขอจากผู้ใช้งานและส่งข้อมูลกลับตามที่กำหนดไว้ใน API",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/review-task.controller.ts",
+ "type": "file",
+ "name": "review-task.controller.ts",
+ "filePath": "modules/review-team/review-task.controller.ts",
+ "summary": "คลาส ReviewTaskController เป็นผู้ควบคุมการจัดการงานตรวจสอบ (Review Task) โดยมีเมธอดต่าง ๆ เช่น findAll, findOne เพื่อแสดงข้อมูลงานตรวจสอบ และ startReview, completeReview, overrideVeto เพื่อกำหนดสถานะการทำงานของแต่ละงาน พร้อมใช้ Decorators เช่น @RequirePermission และ Guards เช่น JwtAuthGuard เพื่อรักษาความปลอดภัยและควบคุมสิทธิ์การเข้าถึง",
+ "tags": [
+ "controller",
+ "review-task",
+ "api-handler",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/dto/shared/review-team.dto.ts",
+ "type": "file",
+ "name": "review-team.dto.ts",
+ "filePath": "modules/review-team/dto/shared/review-team.dto.ts",
+ "summary": "ไฟล์นี้ประกอบด้วยชุดของ DTO (Data Transfer Object) สำหรับการจัดการทีมตรวจสอบและงานตรวจสอบภายในระบบ โดยครอบคลุมตัวอย่างเช่น การสร้าง/อัปเดตทีมตรวจสอบ การเพิ่มสมาชิกเข้าไปในทีม การค้นหาข้อมูล และการควบคุมสถานะงานตรวจสอบ รวมถึงการมอบหมายหน้าที่หรือยกเลิกสิทธิ์ผู้ตรวจสอบ",
+ "tags": [
+ "dto",
+ "review-team",
+ "team-management",
+ "task-status"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/review-task.service.ts",
+ "type": "file",
+ "filePath": "modules/review-team/review-task.service.ts",
+ "name": "review-task.service.ts",
+ "summary": "บริการสำหรับจัดการงานตรวจสอบ (Review Task) โดยมีหน้าที่ดูแลการทำงานต่าง ๆ เช่น การค้นหาข้อมูลตาม revisionId, publicId รวมถึงการเริ่มและส่งเสร็จงานตรวจสอบ อีกทั้งยังรองรับการคำนวณสถานะรวมของงานตรวจสอบ",
+ "tags": [
+ "service",
+ "review-task",
+ "task-management"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/services/consensus.service.ts",
+ "type": "file",
+ "filePath": "modules/review-team/services/consensus.service.ts",
+ "name": "consensus.service.ts",
+ "summary": "บริการสำหรับจัดการกระบวนการตกลงเห็นชอบ (Consensus) ในระบบ Review Team โดยมีเมธอดหลักคือ evaluateAfterTaskComplete ที่ทำงานร่วมกับสถานะงานและผู้ใช้งานอื่น ๆ เพื่อกำหนดผลลัพธ์สุดท้ายของแต่ละ task",
+ "tags": [
+ "service",
+ "consensus",
+ "review-team"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/services/veto-override.service.ts",
+ "type": "file",
+ "name": "veto-override.service.ts",
+ "filePath": "modules/review-team/services/veto-override.service.ts",
+ "summary": "บริการสำหรับจัดการการยกเลิกข้อเสนอแนะ (veto override) ในระบบตรวจสอบงาน โดยมีเมธอดหลักคือ executeOverride ที่ใช้ร่วมกับ enum และ service อื่น ๆ เพื่อให้งานผ่านไปได้อย่างถูกต้องตามกระบวนการ",
+ "tags": [
+ "service",
+ "veto-override",
+ "review-team"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/review-team.controller.ts",
+ "type": "file",
+ "name": "review-team.controller.ts",
+ "filePath": "modules/review-teams/review-team.controller.ts",
+ "summary": "คลาส ReviewTeamController เป็นผู้ควบคุม API สำหรับจัดการทีมตรวจสอบ โดยรองรับการทำงานหลัก เช่น การดึงข้อมูล (findAll, findOne), เพิ่ม/แก้ไขข้อมูล (create, update) และการจัดการสมาชิกในทีม (addMember, removeMember) นอกจากนี้ยังมีเมธอด deactivate สำหรับปิดใช้งานทีมนั้นๆ อีกด้วย",
+ "tags": [
+ "controller",
+ "api-handler",
+ "review-team"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/review-team.service.ts",
+ "type": "file",
+ "name": "review-team.service.ts",
+ "filePath": "modules/review-team/review- team.service.ts",
+ "summary": "บริการสำหรับจัดการทีมประเมินผล โดยรองรับการทำงานต่าง ๆ เช่น การดึงข้อมูลทั้งหมด ค้นหาตาม publicId และประเภท RFA การสร้าง/อัปเดตทีม การเพิ่ม-ลบสมาชิก และการทำสถานะไม่ใช้งาน",
+ "tags": [
+ "service",
+ "review-team",
+ "team-management"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/dto/create-rfa-revision.dto.ts",
+ "type": "file",
+ "name": "create-rfa-revision.dto.ts",
+ "filePath": "modules/rfa/dto/create-rfa-revision.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการสร้างฉบับแก้ไขใหม่ของ RFA โดยมีคลาสชื่อ CreateRfaRevisionDto ที่ใช้ในการรับและตรวจสอบข้อมูลเข้ามาในระบบ",
+ "tags": [
+ "dto",
+ "rfa",
+ "revision"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/rfa/dto/create-rfa.dto.ts",
+ "type": "file",
+ "name": "create-rfa.dto.ts",
+ "filePath": "modules/rfa/dto/create-rfa.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการสร้าง RFA จาก client โดยกำหนดโครงสร้างเฉพาะเจาะจงเพื่อความถูกต้องของข้อมูลที่ส่งเข้ามา",
+ "tags": [
+ "dto",
+ "create-rfa"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/rfa/dto/search-rfa.dto.ts",
+ "type": "file",
+ "name": "search-rfa.dto.ts",
+ "filePath": "modules/rfa/dto/search-rfa.dto.ts",
+ "summary": "DTO สำหรับการค้นหา RFA โดยกำหนดเงื่อนไขและฟิลด์ที่สามารถกรองได้ เช่น เงื่อนไขตามสถานะหรือโครงการ",
+ "tags": [
+ "dto",
+ "search"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/rfa/dto/submit-rfa.dto.ts",
+ "type": "file",
+ "name": "submit-rfa.dto.ts",
+ "filePath": "modules/rfa/dto/submit-rfa.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการส่ง RFA เพื่อเริ่มกระบวนการอนุมัติ โดยตรวจสอบความถูกต้องของข้อมูลก่อนดำเนินการ",
+ "tags": [
+ "dto",
+ "submit"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/rfa/dto/update-rfa.dto.ts",
+ "type": "file",
+ "name": "update-rfa.dto.ts",
+ "filePath": "modules/rfa/dto/update-rfa.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการอัปเดต RFA โดยจำกัดเฉพาะฟิลด์ที่สามารถแก้ไขได้เพื่อรักษาความสมบูรณ์ของข้อมูล",
+ "tags": [
+ "dto",
+ "update"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/rfa/rfa.controller.ts",
+ "type": "file",
+ "name": "rfa.controller.ts",
+ "filePath": "modules/rfa/rfa.controller.ts",
+ "summary": "คลาส RfaController เป็นผู้ควบคุม API สำหรับการจัดการข้อมูล Request for Approval (RFA) โดยมีเมธอดต่าง ๆ เช่น create, submit, processAction เพื่อรองรับการทำงานของระบบอนุมัติเอกสาร และใช้ Decorators เช่น audit.decorator, require-permission.decorator รวมถึง Guards เช่น jwt-auth.guard และ rbac.guard เพื่อรักษาความปลอดภัยและตรวจสอบสิทธิ์ผู้ใช้งาน",
+ "tags": [
+ "controller",
+ "api-handler",
+ "rfa-module",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/rfa.service.ts",
+ "type": "file",
+ "name": "rfa.service.ts",
+ "filePath": "modules/rfa/rfa.service.ts",
+ "summary": "บริการหลักสำหรับจัดการข้อมูลและกระบวนการ Request for Approval (RFA) โดยรองรับการทำงานแบบ asynchronous และมีการเชื่อมโยงกับระบบตรวจสอบสิทธิ์ผู้ใช้งาน",
+ "tags": [
+ "rfa-service",
+ "approval-process"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/transmittal/dto/create-transmittal.dto.ts",
+ "type": "file",
+ "name": "create-transmittal.dto.ts",
+ "filePath": "modules/transmittal/dto/create-transmittal.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการส่งเอกสารใหม่ โดยกำหนดค่าต่าง ๆ เช่น ผู้รับ เอกสารเดิม และประเภทเอกสารที่จะส่งออก",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/transmittal/dto/search-transmittal.dto.ts",
+ "type": "file",
+ "name": "search-transmittal.dto.ts",
+ "filePath": "modules/transmittal/dto/search-transmittal.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการค้นหาเอกสารส่งออก โดยรองรับการกรองตาม UUID, สถานะ และประเภทเอกสาร",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/transmittal/dto/update-transmittal.dto.ts",
+ "type": "file",
+ "name": "update-transmittal.dto.ts",
+ "filePath": "modules/transmittal/dto/update-transmittal.dto.ts",
+ "summary": "ไฟล์นี้เป็น DTO (Data Transfer Object) สำหรับการอัปเดตข้อมูลใบส่งมอบ โดยมีคลาสชื่อ UpdateTransmittalDto ใช้ในการกำหนดโครงสร้างข้อมูลที่รับเข้ามาในระบบเมื่อมีการอัปเดตใบส่งมอบ",
+ "tags": [
+ "dto",
+ "transmittal",
+ "update",
+ "data-transfer-object"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/transmittal/transmittal.controller.ts",
+ "type": "file",
+ "name": "transmittal.controller.ts",
+ "filePath": "modules/transmittal/transmittal.controller.ts",
+ "summary": "Controller สำหรับจัดการ API เกี่ยวกับการส่งเอกสาร โดยรับคำขอจากผู้ใช้งานและส่งข้อมูลกลับไปพร้อมกับตรวจสอบความถูกต้องของข้อมูลทั้งหมด",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/transmittal/transmittal.service.ts",
+ "type": "file",
+ "name": "transmittal.service.ts",
+ "filePath": "modules/transmittal/transmittal.service.ts",
+ "summary": "บริการหลักสำหรับจัดการกระบวนการส่งต่อข้อมูลภายในระบบ โดยรองรับการทำงานร่วมกับเครื่องมือ AI และผู้ใช้งานที่เกี่ยวข้อง",
+ "tags": [
+ "service",
+ "transmittal"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/interfaces/workflow.interface.ts",
+ "type": "file",
+ "name": "workflow.interface.ts",
+ "filePath": "modules/workflow-engine/interfaces/workflow.interface.ts",
+ "summary": "ไฟล์โค้ดระบบ workflow.interface.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/migration/dto/migration-queue-query.dto.ts",
+ "type": "file",
+ "name": "migration-queue-query.dto.ts",
+ "filePath": "modules/migration/dto/migration-queue-query.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการดึงรายการจากคิวย้ายข้อมูล โดยระบุเงื่อนไขในการกรอง เช่น สถานะ, เวลาที่ตั้งไว้ และประเภทของรายการ",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/migration/entities/migration-review-",
+ "type": "file",
+ "name": "migration-review-.entity.ts",
+ "filePath": "modules/migration/entities/migration-review-.entity.ts",
+ "summary": "ส่วนประกอบของระบบ migration-review-.entity.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/migration/entities/import-transaction.entity.ts",
+ "type": "file",
+ "name": "import-transaction.entity.ts",
+ "filePath": "modules/migration/entities/import-transaction.entity.ts",
+ "summary": "Entity สำหรับจัดการรายการธุรกรรมการนำเข้าข้อมูล (Import Transaction) โดยเก็บประวัติการทำรายการและการย้ายข้อมูลจากแหล่งอื่นมาสู่ระบบหลัก",
+ "tags": [
+ "entity",
+ "import-transaction"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/migration/entities/migration-error.entity.ts",
+ "type": "file",
+ "name": "migration-error.entity.ts",
+ "filePath": "modules/migration/entities/migration-error.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของ Entity เกี่ยวกับข้อผิดพลาดในการอัปเดตฐานข้อมูล โดยมีคลาสชื่อ MigrationError ใช้จัดเก็บข้อมูลเฉพาะเจาะจงสำหรับการจัดการข้อผิดพลาดในกระบวนการ migrate",
+ "tags": [
+ "entity",
+ "migration-error"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "type": "file",
+ "filePath": "modules/migration/entities/migration-review-queue.entity.ts",
+ "name": "migration-review-queue.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลคำร้องขอตรวจสอบเอกสารที่ยังไม่ได้ผ่านการประเมินอย่างเป็นทางการ โดยมีสถานะติดตามและกำหนดเวลาหมดอายุไว้เพื่อใช้งานในระบบงาน",
+ "tags": [
+ "entity",
+ "migration-review-queue"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/migration/migration.controller.ts",
+ "type": "file",
+ "name": "migration.controller.ts",
+ "filePath": "modules/migration/migration.controller.ts",
+ "summary": "คลาส MigrationController เป็นผู้ควบคุมการจัดการกระบวนการย้ายข้อมูล (Migration) โดยรองรับการทำงานต่าง ๆ เช่น การนำเข้าความสัมพันธ์ระหว่างรายการ, การยืนยันชุดข้อมูลในครั้งเดียว (commit batch), การเพิ่มรายการลงคิวสำหรับตรวจสอบ, การดึงข้อมูลจากคิว, การสร้างข้อผิดพลาด และการอนุมัติ/ปฏิเสธรายการที่อยู่ในคิว โดยใช้ DTOs ในการรับส่งข้อมูลและเชื่อมโยงกับบริการหลัก (migration.service.ts) เพื่อจัดการตรรกะการทำงาน",
+ "tags": [
+ "controller",
+ "middleware",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/migration/migration.service.ts",
+ "type": "file",
+ "name": "migration.service.ts",
+ "filePath": "modules/migration/migration.service.ts",
+ "summary": "บริการสำหรับจัดการกระบวนการย้ายข้อมูล (Migration) โดยมีหน้าที่รับคำขอในการนำเข้าข้อมูลสัมพันธ์ต่าง ๆ เก็บข้อมูลในคิวตรวจสอบ และจัดการสถานะของแต่ละรายการพร้อมบันทึกข้อผิดพลาดหากเกิดปัญหา",
+ "tags": [
+ "migration-service",
+ "correspondence-import",
+ "queue-management",
+ "error-handling"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/migration/migration.module.ts",
+ "type": "file",
+ "name": "migration.module.ts",
+ "filePath": "modules/migration/migration.module.ts",
+ "summary": "โมดูลหลักสำหรับการจัดการกระบวนการย้ายข้อมูล (Migration) โดยมีหน้าที่ลงทะเบียนบริการและควบคุมการทำงานของระบบย้ายข้อมูล เช่น การสร้าง transaction, review queue และ error handling ผ่าน entity และ service อื่น ๆ",
+ "tags": [
+ "migration-module",
+ "api-handler",
+ "controller-service-barrel"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/migration/workers/expire-pending-reviews.worker.ts",
+ "type": "file",
+ "name": "expire-pending-reviews.worker.ts",
+ "filePath": "modules/migration/workers/expire-pending-reviews.worker.ts",
+ "summary": "คลาส ExpirePendingReviewsWorker ใช้จัดการงานผู้ตรวจสอบเอกสารที่ยังไม่ได้มีการตอบกลับภายในกำหนดเวลา โดยทำงานเป็น background worker เพื่อช่วยลดภาระให้กับระบบหลัก และแจ้งเตือนผู้ใช้งานเมื่อมีเอกสารกำลังหมดอายุ",
+ "tags": [
+ "worker",
+ "background-task",
+ "migration-review-queue",
+ "notification-service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/correspondence/entities/correspond-revision.entity.ts",
+ "type": "file",
+ "name": "correspond-revision.entity.ts",
+ "filePath": "modules/correspondence/entities/correspondence-revision.entity.ts",
+ "summary": "Entity สำหรับการจัดเก็บข้อมูลเวอร์ชันเอกสาร Correspondence โดยมีโครงสร้างที่เชื่อมโยงกับ RFA Revision เพื่อให้สามารถติดตามประวัติการเปลี่ยนแปลงของเอกสารได้อย่างครบถ้วน",
+ "tags": [
+ "entity",
+ "correspondence-revision"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/document-numbering.module.ts",
+ "type": "file",
+ "name": "document-numbering.module.ts",
+ "filePath": "modules/document-numbering/document-numbering.module.ts",
+ "summary": "ไฟล์โค้ดระบบ document-numbering.module.ts",
+ "tags": [
+ "utility",
+ "barrel"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa.entity.ts",
+ "type": "file",
+ "name": "rfa.entity.ts",
+ "filePath": "modules/rfa/entities/rfa.entity.ts",
+ "summary": "Entity หลักสำหรับจัดเก็บข้อมูลเอกสาร RFA (Request for Approval) โดยรวมทั้งรายละเอียดผู้ขออนุมัติ เอกสารแนบ และสถานะปัจจุบันของกระบวนการ",
+ "tags": [
+ "entity",
+ "rfa"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa-item.entity.ts",
+ "type": "file",
+ "name": "rfa-item.entity.ts",
+ "filePath": "modules/rfa/entities/rfa-item.entity.ts",
+ "summary": "Entity สำหรับรายการสินค้าหรือบริการในเอกสาร RFA โดยแต่ละรายการจะมีข้อมูลเฉพาะตัว เช่น ราคา เลขที่ และสถานะ",
+ "tags": [
+ "entity",
+ "rfa-item"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa-workflow.entity.ts",
+ "type": "file",
+ "name": "rfa-workflow.entity.ts",
+ "filePath": "modules/rfa/entities/rfa-workflow.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับคลาส RfaWorkflow ที่ใช้ในการจัดการข้อมูลลำดับการทำงาน (workflow) ในระบบ RFA โดยมีความเกี่ยวข้องกับโมเดลต่าง ๆ เช่น organization, rfa-revision และ user เพื่อให้สามารถสร้างและจัดการ workflow ได้อย่างครบถ้วน",
+ "tags": [
+ "entity",
+ "rfa-workflow",
+ "workflow-management"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "type": "file",
+ "name": "rfa-workflow-template-step.entity.ts",
+ "filePath": "modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "summary": "Entity สำหรับจัดการขั้นตอน (Step) ในแบบฟอร์มของ workflow template โดยใช้เพื่อสร้างลำดับการทำงานที่กำหนดล่วงหน้าได้อย่างยืดหยุ่น",
+ "tags": [
+ "entity",
+ "workflow-template-step"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/entities/rfa-workflow-template.entity.ts",
+ "type": "file",
+ "name": "rfa-workflow-template.entity.ts",
+ "filePath": "modules/rfa/entities/rfa-workflow-template.entity.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างของ Entity ชื่อ RfaWorkflowTemplate โดยใช้ Class เพื่อบันทึกข้อมูลเกี่ยวกับแบบฟอร์มงานด้าน RFa (Request for Approval) ในระบบ มีการนำเข้าข้อมูลจากโมเดลย่อยอย่าง RfaWorkflowTemplateStepEntity เพื่อให้สามารถเชื่อมโยงกับขั้นตอนต่าง ๆ ของกระบวนการได้อย่างครบถ้วน",
+ "tags": [
+ "entity",
+ "rfa-workflow-template",
+ "database-model"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/entities/role.entity.ts",
+ "type": "file",
+ "filePath": "modules/user/entities/role.entity.ts",
+ "name": "role.entity.ts",
+ "summary": "เอนทิตีสำหรับจัดเก็บข้อมูลบทบาท (roles) ของผู้ใช้งาน เช่น Admin, Editor, Viewer เพื่อควบคุมสิทธิ์การเข้าถึงระบบ",
+ "tags": [
+ "entity",
+ "role-management"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/rfa/rfa-workflow.service.ts",
+ "type": "file",
+ "name": "rfa-workflow.service.ts",
+ "filePath": "modules/rfa/rfa-workflow.service.ts",
+ "summary": "บริการสำหรับจัดการกระบวนการยืนยันเอกสาร (RFA Workflow) โดยมีหน้าที่รับคำขอจากผู้ใช้งาน ประมวลผลขั้นตอนต่าง ๆ และส่งสถานะไปยังระบบ workflow-engine เพื่อให้ออกแบบลำดับการทำงานตามกฎเกณฑ์",
+ "tags": [
+ "service",
+ "workflow",
+ "rfa-process",
+ "approval-flow"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/rfa/rfa.module.ts",
+ "type": "file",
+ "filePath": "modules/rfa/rfa.module.ts",
+ "name": "rfa.module.ts",
+ "summary": "โมดูลสำหรับการจัดการกระบวนการขออนุมัติ (RFA) โดยรองรับการทำงานร่วมกับเครื่องมือ AI เพื่อช่วยในการวิเคราะห์และเสนอแนะแนวทางได้",
+ "tags": [
+ "rfa-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/search/dto/search-query.dto.ts",
+ "type": "file",
+ "name": "search-query.dto.ts",
+ "filePath": "modules/search/dto/search-query.dto.ts",
+ "summary": "โครงสร้างข้อมูล (DTO) สำหรับรับค่าคำขอค้นหาจาก client โดยกำหนดประเภทและรูปแบบของข้อมูลที่ต้องการ เช่น keyword, page, limit เป็นต้น เพื่อให้แน่ใจว่าข้อมูลเข้ามาถูกต้อง",
+ "tags": [
+ "dto",
+ "query"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/search/search.controller.ts",
+ "type": "file",
+ "name": "search.controller.ts",
+ "filePath": "modules/search/search.controller.ts",
+ "summary": "ไฟล์นี้เป็น controller สำหรับการค้นหาข้อมูล โดยมีคลาส SearchController ที่จัดการ endpoint การรับคำขอจาก client และส่งผลลัพธ์กลับไปยังผู้ใช้งาน มีเมธอดหลัก ๆ เช่น constructor และ method search() เพื่อประมวลผลคำขอค้นหา",
+ "tags": [
+ "controller",
+ "search",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/search/search.service.ts",
+ "type": "file",
+ "name": "search.service.ts",
+ "filePath": "modules/search/search.service.ts",
+ "summary": "คลาส SearchService เป็นบริการหลักสำหรับจัดการกับการทำงานของระบบค้นหา โดยมีหน้าที่สร้างดัชนี (index) หากยังไม่มีอยู่ เรียกดูเอกสาร และลบเอกสารออกจากระบบได้ นอกจากนี้ยังรองรับการค้นหาข้อมูลตามเงื่อนไขต่าง ๆ ผ่านเมธอด search",
+ "tags": [
+ "service",
+ "search",
+ "indexing"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/search/search.module.ts",
+ "type": "file",
+ "name": "search.module.ts",
+ "filePath": "modules/search/search.module.ts",
+ "summary": "โมดูลสำหรับการค้นหาข้อมูล โดยมีหน้าที่ให้บริการ API เพื่อค้นหารายละเอียดเอกสารสื่อสารและรายการจัดส่งต่าง ๆ ได้อย่างรวดเร็วและแม่นยำ",
+ "tags": [
+ "module",
+ "search"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/transmittal/transmittal.module.ts",
+ "type": "file",
+ "filePath": "modules/transmittal/transmittal.module.ts",
+ "name": "transmittal.module.ts",
+ "summary": "โมดูลสำหรับการจัดการงานส่งเอกสาร (Transmittal) โดยรองรับการทำงานร่วมกับเครื่องมือ AI เพื่อช่วยในการสรุปและเตรียมเอกสารได้อย่างรวดเร็ว",
+ "tags": [
+ "transmittal-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/project/project.module.ts",
+ "type": "file",
+ "name": "project.module.ts",
+ "filePath": "modules/project/project.module.ts",
+ "summary": "โมดูลหลักสำหรับการจัดการโปรเจกต์ โดยมีหน้าที่ลงทะเบียนบริบทของระบบและเชื่อมโยงส่วนประกอบต่าง ๆ เช่น controller, service และ entity เข้าไว้ด้วยกัน",
+ "tags": [
+ "module",
+ "nestjs",
+ "project-management"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "type": "file",
+ "name": "workflow-engine.module.ts",
+ "filePath": "modules/workflow-engine/workflow-engine.module.ts",
+ "summary": "โมดูลหลักสำหรับจัดการระบบการทำงานแบบลำดับขั้น (Workflow Engine) โดยมีหน้าที่กำหนดโครงสร้างและบริหารจัดการกระบวนการต่าง ๆ ผ่าน Entity และ Service เช่น WorkflowDefinition, WorkflowInstance และ WorkflowHistory",
+ "tags": [
+ "module",
+ "workflow-engine",
+ "nestjs-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/validators/review-validators.ts",
+ "type": "file",
+ "name": "review-validators.ts",
+ "filePath": "common/validators/review-validators.ts",
+ "summary": "ไฟล์นี้มีหน้าที่ตรวจสอบข้อมูลต่าง ๆ เพื่อให้มั่นใจว่าค่าที่ส่งเข้ามาตรงตามเงื่อนไขหรือรูปแบบที่กำหนดไว้ โดยประกอบด้วยฟังก์ชันสำหรับตรวจสอบวันครบกำหนด การมอบหมายงาน ข้อกำหนดการดำเนินงาน และเหตุผลในการยกเว้นเวลา",
+ "tags": [
+ "validator",
+ "review",
+ "validation",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:database/seeds/user.seed.ts",
+ "type": "file",
+ "name": "user.seed.ts",
+ "filePath": "database/seeds/user.seed.ts",
+ "summary": "ไฟล์นี้เก็บข้อมูลต้นแบบของผู้ใช้งาน (users) ที่ใช้ในการเติมเต็มฐานข้อมูลเมื่อเริ่มระบบครั้งแรก",
+ "tags": [
+ "seed-data",
+ "user"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/delegation/delegation.module.ts",
+ "type": "file",
+ "name": "delegation.module.ts",
+ "filePath": "modules/delegation/delegation.module.ts",
+ "summary": "โมดูลหลักสำหรับการจัดการหน้าที่มอบหมายงาน โดยมีการนำเข้าบริบทจาก auth/casl เพื่อควบคุมสิทธิ์ผู้ใช้งาน และเชื่อมโยงกับ controller, service และ entity ต่าง ๆ",
+ "tags": [
+ "module",
+ "delegation",
+ "casl-authentication"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/auth/casl/casl.module.ts",
+ "type": "file",
+ "filePath": "common/auth/casl/casl.module.ts",
+ "name": "casl.module.ts",
+ "summary": "โมดูลสำหรับการจัดการสิทธิ์และบทบาทผู้ใช้งาน โดยใช้ระบบ CASL เพื่อควบคุมการเข้าถึงข้อมูลตามระดับสิทธิ์",
+ "tags": [
+ "auth",
+ "casl"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/delegation/entities/delegation.entity.ts",
+ "type": "file",
+ "name": "delegation.entity.ts",
+ "filePath": "modules/delegation/entities/delegation.entity.ts",
+ "summary": "Entity สำหรับจัดการข้อมูลการมอบอำนาจ (Delegation) โดยมีโครงสร้างที่สามารถเชื่อมโยงกันได้หลายชั้น เพื่อรองรับการทำงานของระบบตรวจสอบวงจรในบริบทของการส่งต่อหน้าที่",
+ "tags": [
+ "entity",
+ "delegation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/delegation/services/circular-detection.service.ts",
+ "type": "file",
+ "name": "circular-detection.service.ts",
+ "filePath": "modules/delegation/services/circular-detection.service.ts",
+ "summary": "บริการตรวจสอบวงจร (Circular Detection Service) ที่ใช้สำหรับตรวจจับวงจรในโครงสร้างข้อมูล เช่น การเชื่อมโยงระหว่าง entity โดยอาศัยอัลกอริธึม DFS เพื่อวิเคราะห์ความเป็นไปได้ว่าจะเกิดการวนซ้ำหรือไม่",
+ "tags": [
+ "service",
+ "circular-detection",
+ "dfs-algorithm",
+ "dependency-check"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/distribution/distribution-matrix.service.ts",
+ "type": "file",
+ "name": "distribution-matrix.service.ts",
+ "filePath": "modules/distribution/distribution-matrix.service.ts",
+ "summary": "บริการสำหรับจัดการแมทริกซ์การกระจายเอกสาร โดยคำนวณและกำหนดเส้นทางการส่งมอบให้กับผู้รับตามโครงสร้างองค์กร",
+ "tags": [
+ "service",
+ "distribution-matrix"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/distribution/dto/add-distribution-recipient.dto.ts",
+ "type": "file",
+ "name": "add-distribution-recipient.dto.ts",
+ "filePath": "modules/distribution/dto/add-distribution-recipient.dto.ts",
+ "summary": "คลาส AddDistributionRecipientDto ใช้สำหรับกำหนดข้อมูลผู้รับการกระจายรายได้ โดยมีโครงสร้างที่ชัดเจนเพื่อรองรับการรับค่าเข้ามาในระบบ การจัดเก็บข้อมูลผ่านตัวแปรประเภท string และ enum เพื่อกำหนดประเภทของผู้รับ",
+ "tags": [
+ "dto",
+ "distribution-recipient",
+ "add-distribution"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/distribution/dto/create-distribution-matrix.dto.ts",
+ "type": "file",
+ "name": "create-distribution-matrix.dto.ts",
+ "filePath": "modules/distribution/dto/create-distribution-matrix.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการสร้างเมทริกซ์การกระจายสินค้า โดยมีคลาสหรือชุดของ DTO (Data Transfer Object) สองตัวได้แก่ DistributionConditionsDto และ CreateDistributionMatrixDto เพื่อใช้ในการรับและส่งข้อมูลระหว่าง layer เดียวกันหรือระหว่างระบบ",
+ "tags": [
+ "dto",
+ "distribution-matrix",
+ "data-transfer-object"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/distribution/dto/update-distribution-matrix.dto.ts",
+ "type": "file",
+ "name": "update-distribution-matrix.dto.ts",
+ "filePath": "modules/distribution/dto/update-distribution-matrix.dto.ts",
+ "summary": "คลาส UpdateDistributionMatrixDto ใช้สำหรับรับข้อมูลอัปเดตเมทริกซ์การกระจายรายได้ โดยมีโครงสร้างที่ชัดเจนเพื่อกำหนดค่าต่าง ๆ เช่น อัตราส่วนการแบ่งปันรายได้ระหว่างผู้ใช้งานแต่ละคน",
+ "tags": [
+ "dto",
+ "distribution-matrix",
+ "update"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/distribution/distribution.controller.ts",
+ "type": "file",
+ "name": "distribution.controller.ts",
+ "filePath": "modules/distribution/distribution.controller.ts",
+ "summary": "ควบคุมการเรียกใช้งาน API สำหรับจัดสรรเอกสาร โดยรับคำขอจากผู้ใช้และส่งต่อไปยังบริการหลัก ๆ เช่น distribution.service และ processor เพื่อประมวลผลตามลำดับ",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/distribution/distribution.module.ts",
+ "type": "file",
+ "name": "distribution.module.ts",
+ "filePath": "modules/distribution/distribution.module.ts",
+ "summary": "โมดูลหลักสำหรับการจัดสรรเอกสาร โดยมีหน้าที่สร้างและจัดการบริบทของระบบรวมถึงกำหนดโครงสร้างการทำงานร่วมกับตัวแทนอื่น ๆ เช่น controller, service และ processor ผ่านการประกาศ DistributionModule",
+ "tags": [
+ "module",
+ "distribution",
+ "nestjs-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/distribution/distribution.service.ts",
+ "type": "file",
+ "name": "distribution.service.ts",
+ "filePath": "modules/distribution/distribution.service.ts",
+ "summary": "บริการหลักสำหรับจัดสรรทรัพยากรหรือสินค้าต่างๆ ในระบบ โดยมีหน้าที่เชื่อมโยงกับเหตุการณ์อนุมัติต่าง ๆ ผ่าน ApprovalListenerService",
+ "tags": [
+ "service",
+ "distribution"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/distribution/processors/distribution.processor.ts",
+ "type": "file",
+ "name": "distribution.processor.ts",
+ "filePath": "modules/distribution/processors/distribution.processor.ts",
+ "summary": "คลาส DistributionProcessor ใช้จัดการกระบวนการกระจายข้อมูล โดยมีเมธอด process เพื่อเรียกใช้งานบริการต่าง ๆ เช่น การสร้างเอกสารโอนส่ง และแจ้งเตือนผู้เกี่ยวข้อง",
+ "tags": [
+ "processor",
+ "distribution",
+ "queue",
+ "service-hub"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/distribution/services/approval-listener.service.ts",
+ "type": "file",
+ "filePath": "modules/distribution/services/approval-listener.service.ts",
+ "name": "approval-listener.service.ts",
+ "summary": "บริการสำหรับตรวจจับเหตุการณ์อนุมัติ (approval) และแจ้งเตือนผู้เกี่ยวข้องในระบบกระจายงาน โดยทำงานร่วมกับโมดูลตรวจสอบงานเพื่อให้กระบวนการไหลลื่น",
+ "tags": [
+ "service",
+ "approval-listener"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/notification/notification.module.ts",
+ "type": "file",
+ "name": "notification.module.ts",
+ "filePath": "modules/notification/notification.module.ts",
+ "summary": "โมดูลสำหรับจัดการระบบแจ้งเตือน โดยมีการนำเข้าบริบทต่าง ๆ เช่น entity, service และ controller เพื่อให้การทำงานของระบบแจ้งเตือนสามารถเชื่อมโยงกันได้อย่างเป็นระเบียบ",
+ "tags": [
+ "module",
+ "notification",
+ "nestjs"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "file",
+ "name": "user-assignment.entity.ts",
+ "filePath": "modules/user/entities/user-assignment.entity.ts",
+ "summary": "Entity สำหรับเก็บข้อมูลการจัดสรรสิทธิ์ให้กับผู้ใช้งาน โดยมีความสัมพันธ์กับ user และ permissions เพื่อรองรับระบบตรวจสอบสิทธิ์แบบ fine-grained",
+ "tags": [
+ "entity",
+ "user-assignment"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "file",
+ "name": "response-code.entity.ts",
+ "filePath": "modules/response-code/entities/response-code.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลรหัสตอบกลับ (Response Code) ในระบบ โดยมีโครงสร้างเพื่อใช้ในการตรวจสอบและควบคุมพฤติกรรมของระบบตามสถานะต่าง ๆ",
+ "tags": [
+ "entity",
+ "response-code"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/reminder/dto/create-reminder-rule.dto.ts",
+ "type": "dto",
+ "name": "create-reminder-rule.dto.ts",
+ "filePath": "modules/reminder/dto/create-reminder-rule.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับรับค่าอินพุตในการสร้างกฎการเตือนภัย โดยใช้ในเมธอด create ของ ReminderService เพื่อยืนยันความถูกต้องก่อนบันทึกข้อมูลลงฐานข้อมูล",
+ "tags": [
+ "dto",
+ "create-reminder-rule"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/reminder/entities/reminder-history.entity.ts",
+ "type": "entity",
+ "name": "reminder-history.entity.ts",
+ "filePath": "modules/reminder/entities/reminder-history.entity.ts",
+ "summary": "ส่วนประกอบสำหรับเก็บประวัติการแจ้งเตือนภัยที่ผ่านมา โดยใช้ร่วมกันในเมธอด findHistoryByTaskPublicId เพื่อให้เห็นภาพรวมของการแจ้งเตือนตามแต่ละงานตรวจสอบ",
+ "tags": [
+ "entity",
+ "history"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "file",
+ "filePath": "modules/review-team/entities/review-task.entity.ts",
+ "name": "review-task.entity.ts",
+ "summary": "Entity สำหรับแสดงข้อมูลงานตรวจสอบ (review task) ในระบบ โดยเก็บรายละเอียดของแต่ละงาน เช่น สตั๊ป การอนุมัติ และสถานะการดำเนินการ",
+ "tags": [
+ "entity",
+ "review-task"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "type": "file",
+ "name": "reminder-rule.entity.ts",
+ "filePath": "modules/reminder/entities/reminder-rule.entity.ts",
+ "summary": "คลาส Entity สำหรับกำหนดกฎการแจ้งเตือน (reminder rules) เช่น เวลาเริ่มต้น สิ้นสุด และประเภทของ reminder โดยใช้ใน SchedulerService เพื่อจัดสรรงานตามเงื่อนไขที่กำหนดไว้",
+ "tags": [
+ "entity",
+ "reminder-rule"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/reminder/processors/reminder.processor.ts",
+ "type": "file",
+ "filePath": "modules/reminder/processors/reminder.processor.ts",
+ "name": "reminder.processor.ts",
+ "summary": "คลาส processor สำหรับจัดการกระบวนการแจ้งเตือน โดยรับข้อมูลจาก rule และ entity เพื่อตรวจสอบเงื่อนไขและเรียกใช้ service เหล่านั้นตามลำดับ",
+ "tags": [
+ "processor"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/reminder/services/escalation.service.ts",
+ "type": "file",
+ "name": "escalation.service.ts",
+ "filePath": "modules/reminder/services/escalation.service.ts",
+ "summary": "คลาส EscalationService ทำหน้าที่จัดการกระบวนการขึ้นระดับความรุกแรงของงานแจ้งเตือน โดยตรวจสอบจำนวนครั้งที่ถูกล็อกหรือล่าช้าเกินกำหนด และเรียกร้องให้มีการดำเนินการตามลำดับอันตรายเพิ่มขึ้นไปเรื่อย ๆ หากเกินกว่าเกณฑ์ที่ตั้งไว้",
+ "tags": [
+ "service",
+ "escalation",
+ "reminder",
+ "workflow"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/reminder/services/scheduler.service.ts",
+ "type": "file",
+ "filePath": "modules/reminder/services/scheduler.service.ts",
+ "name": "scheduler.service.ts",
+ "summary": "บริการจัดสรรเวลาแจ้งเตือน (reminder) สำหรับงานตรวจสอบต่าง ๆ โดยอาจเชื่อมโยงกับ task-creation เพื่อแจ้งเตือนเมื่อ Task เสร็จสิ้น",
+ "tags": [
+ "service",
+ "scheduler",
+ "reminder"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/reminder/reminder.controller.ts",
+ "type": "file",
+ "filePath": "modules/reminder/reminder.controller.ts",
+ "name": "reminder.controller.ts",
+ "summary": "Controller สำหรับจัดการ endpoint เกี่ยวกับแจ้งเตือน เช่น การสร้างกฎ, อัปเดตสถานะแจ้งเตือน และดูประวัติแจ้งเตือน โดยเชื่อมโยงกับ service เพื่อให้ข้อมูลกลับไปยัง client",
+ "tags": [
+ "controller"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/reminder/reminder.service.ts",
+ "type": "file",
+ "name": "reminder.service.ts",
+ "filePath": "modules/reminder/reminder.service.ts",
+ "summary": "คลาส ReminderService เป็นบริการหลักสำหรับจัดการข้อมูลเตือนภัย โดยมีหน้าที่รองรับการทำงานต่าง ๆ เช่น การดึงข้อมูลเตือนภัยทั้งหมด ตามโครงการเฉพาะ และประวัติการแจ้งเตือนจากงานตรวจสอบ ส่งเสริมให้ผู้ใช้งานสามารถสร้าง อัปเดต และลบรายการเตือนได้อย่างยืดหยุ่น",
+ "tags": [
+ "service",
+ "reminder",
+ "project-management"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/reminder/reminder.module.ts",
+ "type": "file",
+ "name": "reminder.module.ts",
+ "filePath": "modules/reminder/reminder.module.ts",
+ "summary": "โมดูลนี้กำหนดโครงสร้างการทำงานของระบบแจ้งเตือน โดยมีการนำเข้าตัวแปรคงที่จากโมดูลอื่น ๆ เช่น queue.constants และ entities ต่าง ๆ จากโมดูล project, user เป็นต้น เพื่อใช้ในการจัดการเหตุการณ์แจ้งเตือนและกำหนดการทำงานของระบบตามกฎเกณฑ์",
+ "tags": [
+ "module",
+ "reminder",
+ "notification",
+ "scheduler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:database/seeds/workflow-definitions.seed.ts",
+ "type": "file",
+ "name": "workflow-definitions.seed.ts",
+ "filePath": "database/seeds/workflow-definitions.seed.ts",
+ "summary": "ไฟล์นี้มีหน้าที่สร้างข้อมูลเริ่มต้นสำหรับ Workflow Definitions โดยใช้ฟังก์ชัน seedWorkflowDefinitions ซึ่งนำเข้าโมเดลจาก workflow-definition.entity และบริการ workflow-dsl.service เพื่อจัดเตรียมโครงสร้างการทำงานของระบบตามรูปแบบที่กำหนดไว้",
+ "tags": [
+ "seed",
+ "workflow-definitions",
+ "database-seed"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/circulation/circulation-workflow.service.ts",
+ "type": "file",
+ "name": "circulation-workflow.service.ts",
+ "filePath": "modules/circulation/circulation-workflow.service.ts",
+ "summary": "บริการเฉพาะสำหรับจัดการลำดับการทำงานของเอกสารในวงจร โดยเชื่อมโยงกับระบบ workflow-engine เพื่อควบคุมการไหลเวียนของเอกสารตามขั้นตอนที่กำหนดไว้ล่วงหน้า",
+ "tags": [
+ "workflow-service",
+ "circulation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/circibility/entities/circulation.entity.ts",
+ "type": "file",
+ "name": "circulation.entity.ts",
+ "filePath": "modules/circulation/entities/circulation.entity.ts",
+ "summary": "Entity สำหรับเก็บข้อมูลสถานะการส่งคืนหนังสือ โดยมีโครงสร้างเฉพาะทางเพื่อรองรับการทำงานของระบบ circulation workflow",
+ "tags": [
+ "entity",
+ "circulation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/circulation/circulation.module.ts",
+ "type": "file",
+ "name": "circulation.module.ts",
+ "filePath": "modules/circulation/circulation.module.ts",
+ "summary": "โมดูลหลักสำหรับการจัดการวงจรเอกสาร โดยมีหน้าที่นำเข้าและลงทะเบียนบริการต่าง ๆ เช่น controller, service และ entity เพื่อให้ระบบสามารถทำงานร่วมกันได้อย่างเป็นระเบียบ",
+ "tags": [
+ "module",
+ "circulation",
+ "controller",
+ "service",
+ "entity"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/circulation/entities/circulation.entity.ts",
+ "type": "file",
+ "name": "circulation.entity.ts",
+ "filePath": "modules/circulation/entities/circulation.entity.ts",
+ "summary": "ไฟล์นี้สร้างคลาส Circulation ซึ่งใช้เป็น Entity เพื่อจัดเก็บข้อมูลการเคลื่อนย้ายเอกสารภายในองค์กร โดยมีความสัมพันธ์เชิงโครงสร้างกับหลายโมดูล เช่น การจัดการเอกสาร ส่งต่อเอกสาร และสถานะของเอกสาร",
+ "tags": [
+ "entity",
+ "circulation",
+ "document-flow",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "type": "file",
+ "name": "circulation-routing.entity.ts",
+ "filePath": "modules/circulation/entities/circulation-routing.entity.ts",
+ "summary": "คลาสที่เก็บข้อมูลเส้นทางการส่งเอกสารระหว่างหน่วยงานต่าง ๆ ภายในองค์กร โดยระบุจุดเริ่มต้นและปลายทางของการเคลื่อนย้ายเอกสาร",
+ "tags": [
+ "routing",
+ "document-path"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/dashboard/dashboard.controller.ts",
+ "type": "file",
+ "filePath": "modules/dashboard/dashboard.controller.ts",
+ "name": "dashboard.controller.ts",
+ "summary": "Controller สำหรับจัดการ API เรียกใช้งานแดชบอร์ด โดยเชื่อมโยงเข้ากับ service เพื่อดึงข้อมูลจาก entity และแสดงผลบนหน้าเว็บ",
+ "tags": [
+ "controller",
+ "dashboard"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/dashboard/dashboard.service.ts",
+ "type": "file",
+ "name": "dashboard.service.ts",
+ "filePath": "modules/dashboard/dashboard.service.ts",
+ "summary": "คลาส DashboardService เป็นบริการหลักสำหรับจัดการข้อมูลแดชบอร์ด โดยมีหน้าที่ตรวจสอบสิทธิ์เข้าถึงโครงการ ดึงสถิติด้านกิจกรรมและงานยังไม่เสร็จสิ้นจากโมดูลต่างๆ เช่น correspondence, project และ workflow-instance",
+ "tags": [
+ "service",
+ "dashboard",
+ "project-access-check",
+ "stats-fetcher"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/dashboard/dashboard.module.ts",
+ "type": "file",
+ "name": "dashboard.module.ts",
+ "filePath": "modules/dashboard/dashboard.module.ts",
+ "summary": "โมดูลหลักสำหรับแดชบอร์ด โดยมีการนำเข้าและจัดสรร entity ต่าง ๆ เช่น audit-log, correspondence, project, user-assignment และ workflow-instance เพื่อใช้งานร่วมกับ controller และ service",
+ "tags": [
+ "module",
+ "dashboard",
+ "nestjs"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/entities/workflow-definition.entity.ts",
+ "type": "file",
+ "name": "workflow-definition.entity.ts",
+ "filePath": "modules/workflow-engine/entities/workflow-definition.entity.ts",
+ "summary": "คลาสที่แทนโครงสร้างของ workflow definition ในฐานข้อมูล โดยเก็บข้อมูลทั้งหมดที่ได้จากการแปลง DSL มาใช้งานจริงในระบบงาน",
+ "tags": [
+ "entity",
+ "workflow-definition"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "type": "file",
+ "filePath": "modules/workflow-engine/workflow-dsl.service.ts",
+ "name": "workflow-dsl.service.ts",
+ "summary": "บริการจัดการโครงสร้างภาษาแบบ DSL (Domain Specific Language) สำหรับการออกแบบและกำหนดลำดับการทำงานของ workflow โดยให้ผู้ใช้งานสามารถเขียนกฎการทำงานในรูปแบบเฉพาะทางได้อย่างยืดหยุ่น",
+ "tags": [
+ "workflow-dsl",
+ "dsl-engine"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/dashboard/dto/index.ts",
+ "type": "file",
+ "name": "index.ts",
+ "filePath": "modules/dashboard/dto/index.ts",
+ "summary": "ไฟล์โค้ดระบบ index.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "type": "file",
+ "name": "workflow-instance.entity.ts",
+ "filePath": "modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "summary": "เอนทิตี้ (entity) สำหรับแทนสถานะของ workflow instance โดยเก็บข้อมูลเช่น ID, current state, และ metadata เกี่ยวกับการดำเนินงานในแต่ละขั้นตอน",
+ "tags": [
+ "workflow-instance",
+ "database-entity"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/dto/create-workflow-definition.dto.ts",
+ "type": "file",
+ "name": "create-workflow-definition.dto.ts",
+ "filePath": "modules/workflow-engine/dto/create-workflow-definition.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการสร้าง definition ของ workflow โดยกำหนดโครงสร้างและประเภทข้อมูลที่ยอมรับได้",
+ "tags": [
+ "dto",
+ "workflow-definition"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/dto/evaluate-workflow.dto.ts",
+ "type": "file",
+ "name": "evaluate-workflow.dto.ts",
+ "filePath": "modules/workflow-engine/dto/evaluate-workflow.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลในการประเมิน workflow โดยระบุเงื่อนไขและตัวแปรที่ใช้ในการคำนวณผลลัพธ์",
+ "tags": [
+ "dto",
+ "workflow-evaluate"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/dto/update-workflow-definition.dto.ts",
+ "type": "file",
+ "name": "update-workflow-definition.dto.ts",
+ "filePath": "modules/workflow-engine/dto/update-workflow-definition.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลในการอัปเดต definition ของ workflow โดยกำหนดโครงสร้างและประเภทข้อมูลที่ยอมรับได้",
+ "tags": [
+ "dto",
+ "workflow-update"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/dto/workflow-history-item.dto.ts",
+ "type": "file",
+ "name": "workflow-history-item.dto.ts",
+ "filePath": "modules/workflow-engine/dto/workflow-history-item.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการจัดเก็บประวัติการทำงานของ workflow โดยมีคลาสสองประเภทคือ AttachmentSummaryDto และ WorkflowHistoryItemDto ซึ่งใช้ในการแสดงผลและแลกเปลี่ยนข้อมูลระหว่างระบบ",
+ "tags": [
+ "dto",
+ "workflow-engine",
+ "history-item"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/entities/workflow-history.entity.ts",
+ "type": "file",
+ "filePath": "modules/workflow-engine/entities/workflow-history.entity.ts",
+ "name": "workflow-history.entity.ts",
+ "summary": "Entity สำหรับบันทึกประวัติการทำงานของงาน (Workflow) โดยเก็บข้อมูลสถานะ เวลา และผู้ดำเนินการแต่ละขั้นตอน เพื่อให้สามารถตรวจสอบและย้อนกลับได้อย่างแม่นยำ",
+ "tags": [
+ "workflow-history"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "type": "file",
+ "name": "workflow-transition.guard.ts",
+ "filePath": "modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "summary": "Guard ที่ตรวจสอบความถูกต้องของ transition ใน workflow ก่อนดำเนินการเปลี่ยนสถานะ",
+ "tags": [
+ "guard",
+ "transition-validation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "type": "file",
+ "name": "workflow-engine.controller.ts",
+ "filePath": "modules/workflow-engine/workflow-engine.controller.ts",
+ "summary": "คลาส WorkflowEngineController เป็นตัวควบคุม (controller) สำหรับจัดการการทำงานของระบบ workflow โดยมีเมธอดรองรับทั้งการสร้าง การดึงข้อมูล การอัปเดต และประเมินงานตามลำดับขั้นตอน อีกทั้งยังรองรับการตรวจสอบสิทธิ์ผ่าน decorator และ guard เพื่อรักษาความปลอดภัยของระบบ",
+ "tags": [
+ "controller",
+ "workflow-engine",
+ "api-handler",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/workflow-event.processor.ts",
+ "type": "file",
+ "name": "workflow-event.processor.ts",
+ "filePath": "modules/workflow-engine/workflow-event.processor.ts",
+ "summary": "คลาส WorkflowEventProcessor ใช้จัดการเหตุการณ์ของ workflow โดยมีเมธอด process เพื่อประมวลผลเหตุการณ์แต่ละรายการ และมีเมธอด onJobFailed เพื่อรับมือกรณีงานล้มเหลว นอกจากนี้ยังมี method processSingleEvent สำหรับประมวลผลเหตุการณ์รายรายการ",
+ "tags": [
+ "event-processing",
+ "workflow-engine",
+ "job-failure-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/workflow-event.service.ts",
+ "type": "file",
+ "name": "workflow-event.service.ts",
+ "filePath": "modules/workflow-engine/workflow-event.service.ts",
+ "summary": "บริการจัดการเหตุการณ์ของระบบ workflow โดยมีหน้าที่รับและกระจายเหตุการณ์ต่าง ๆ ไปยังผู้ใช้งานหรือโมดูลอื่นๆ เฉพาะเมื่อมีเหตุการณ์เกิดขึ้นในกระบวนการจัดลำดับงาน",
+ "tags": [
+ "service",
+ "workflow-event",
+ "event-dispatcher"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/response-code/dto/create-response-code.dto.ts",
+ "type": "file",
+ "filePath": "modules/response-code/dto/create-response-code.dto.ts",
+ "name": "create-response-code.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการสร้างรหัสตอบกลับใหม่ โดยระบุประเภท ชื่อเรียก และค่าต่าง ๆ เพื่อนำไปใช้ใน API request",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/response-code/dto/update-response-code.dto.ts",
+ "type": "file",
+ "filePath": "modules/response-code/dto/update-response-code.dto.ts",
+ "name": "update-response-code.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการอัปเดตรหัสตอบกลับ โดยระบุค่าที่ต้องการเปลี่ยนแปลง เช่น ชื่อเรียกหรือประเภท เพื่อนำไปใช้ใน API request",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/response-code/dto/upsert-response-code-rule.dto.ts",
+ "type": "file",
+ "filePath": "modules/response-code/dto/upsert-response-code-rule.dto.ts",
+ "name": "upsert-response-code-rule.dto.ts",
+ "summary": "โครงสร้างข้อมูล (DTO) สำหรับการเพิ่มหรืออัปเดตกฎเกณฑ์ของ response code โดยรองรับทั้งการ insert และ update",
+ "tags": [
+ "dto",
+ "rule-management"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "type": "file",
+ "name": "response-code-rule.entity.ts",
+ "filePath": "modules/response-code/entities/response-code-rule.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บกฎการตอบกลับ (Response Code Rule) โดยมีโครงสร้างเฉพาะเจาะจงเพื่อควบคุมพฤติกรรมของระบบตามประเภทเอกสารและบริบทการทำงาน",
+ "tags": [
+ "entity",
+ "response-code-rule"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/response-code/response-code.controller.ts",
+ "type": "file",
+ "name": "response-code.controller.ts",
+ "filePath": "modules/response-code/response-code.controller.ts",
+ "summary": "Controller สำหรับจัดการ endpoint เกี่ยวกับ Response Code โดยรับคำขอจากผู้ใช้งานและส่งคืนข้อมูลตามที่กำหนดไว้ในโมดูลนี้",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/response-code/response-code.module.ts",
+ "type": "file",
+ "name": "response-code.module.ts",
+ "filePath": "modules/response-code/response-code.module.ts",
+ "summary": "โมดูลนี้กำหนดโครงสร้างการทำงานของระบบ Response Code โดยมีการนำเข้า Entity และบริการต่าง ๆ มาใช้ เช่น audit.service, implications.service, inheritance.service รวมถึง controller และ service เพื่อให้งานจัดการ response code มีความสมบูรณ์และเชื่อมโยงกับโมดูลอื่นๆ ในระบบได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "module",
+ "response-code",
+ "nestjs-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/response-code/response-code.service.ts",
+ "type": "file",
+ "filePath": "modules/response-code/response-code.service.ts",
+ "name": "response-code.service.ts",
+ "summary": "บริการสำหรับจัดการรหัสตอบกลับ (Response Code) โดยมีหน้าที่รองรับการทำงานต่าง ๆ เช่น การดึงข้อมูลตามประเภท ชนิดเอกสาร และ ID เปิดเผย อัปเดตข้อมูล และลบสถานะใช้งานได้ หากจำเป็น นอกจากนี้ยังจัดการบทบาทในการแจ้งเตือนอื่นๆ",
+ "tags": [
+ "service",
+ "response-code",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/response-code/services/inheritance.service.ts",
+ "type": "file",
+ "name": "inheritance.service.ts",
+ "filePath": "modules/response-code/services/inheritance.service.ts",
+ "summary": "บริการสำหรับจัดการกระบวนการสืบทอดค่าตอบแทนตามโครงสร้างข้อมูล โดยมีเมธอดหลักชื่อ resolveMatrix ที่ใช้ในการประมวลผลแมทริกซ์ของกฎระเบียบ และตัวแปรภายในคลาสหรือ constructor เพื่อรับข้อมูลนำเข้า",
+ "tags": [
+ "service",
+ "inheritance",
+ "response-code-rule"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/response-code/services/matrix-management.service.ts",
+ "type": "file",
+ "name": "matrix-management.service.ts",
+ "filePath": "modules/response-code/services/matrix-management.service.ts",
+ "summary": "คลาส MatrixManagementService ทำหน้าที่จัดการกฎเกณฑ์ (rules) และข้อมูลเอกสารต่าง ๆ โดยมีเมธอดหลัก เช่น upsertRule เพื่อเพิ่มหรือแก้ไขกฎ, getRulesByDocType เพื่อดึงกฎตามประเภทเอกสาร และ deleteProjectOverride เพื่อลบการทับซ้อนของโครงการ",
+ "tags": [
+ "service",
+ "matrix-management",
+ "rule-service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/response-code/services/implications.service.ts",
+ "type": "file",
+ "name": "implications.service.ts",
+ "filePath": "modules/response-code/services/implications.service.ts",
+ "summary": "บริการสำหรับจัดการผลลัพธ์ทางตรรกะที่เกิดขึ้นจากการตอบกลับ เช่น การตีความเงื่อนไขและผลกระทบต่อระบบอื่น ๆ",
+ "tags": [
+ "service",
+ "implications"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/response-code/services/notification-trigger.service.ts",
+ "type": "file",
+ "name": "notification-trigger.service.ts",
+ "filePath": "modules/response-code/services/notification-trigger.service.ts",
+ "summary": "บริการสำหรับกระตุ้นการแจ้งเตือนเมื่อมีข้อความตอบกลับที่จำเป็น โดยใช้วิธีตรวจสอบเงื่อนไขจากโมดูลอื่น ๆ เช่น notification.service และ implications.service เพื่อกำหนดว่าควรแจ้งเตือนหรือไม่",
+ "tags": [
+ "service",
+ "notification-trigger",
+ "response-code"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/response-code/seeders/response-code.seed.ts",
+ "type": "file",
+ "name": "response-code.seed.ts",
+ "filePath": "modules/response-code/seeders/response-code.seed.ts",
+ "summary": "ไฟล์นี้ใช้สำหรับการเติมข้อมูลเริ่มต้น (seeding) ของ response code โดยมีฟังก์ชัน seedResponseCodes เพื่อสร้างข้อมูลในระบบ และส่งคืนข้อมูลที่เตรียมไว้เพื่อนำไปใช้งานได้ทันที",
+ "tags": [
+ "seeder",
+ "seed-data",
+ "response-code",
+ "database-initialization"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "type": "file",
+ "filePath": "modules/review-team/entities/review-team-member.entity.ts",
+ "name": "review-team-member.entity.ts",
+ "summary": "Entity สำหรับสมาชิกในทีมตรวจสอบ โดยเก็บข้อมูลส่วนตัวและบทบาทของแต่ละคน",
+ "tags": [
+ "entity",
+ "team-member"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/review-team/entities/review-team.entity.ts",
+ "type": "file",
+ "filePath": "modules/review-team/entities/review-team.entity.ts",
+ "name": "review-team.entity.ts",
+ "summary": "Entity สำหรับทีมตรวจสอบ โดยเก็บข้อมูลสมาชิกและโครงสร้างของทีม",
+ "tags": [
+ "entity",
+ "review-team"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/review-team/review-team.module.ts",
+ "type": "file",
+ "name": "review-team.module.ts",
+ "filePath": "modules/review-team/review-team.module.ts",
+ "summary": "ไฟล์โค้ดระบบ review-team.module.ts",
+ "tags": [
+ "utility",
+ "barrel"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/review-team/services/aggregate-status.service.ts",
+ "type": "file",
+ "filePath": "modules/review-team/services/aggregate-status.service.ts",
+ "name": "aggregate-status.service.ts",
+ "summary": "บริการสำหรับรวมสถานะของงานรีวิวหลายรายการเข้าด้วยกัน เพื่อสร้างผลลัพธ์รวม เช่น คะแนนเฉลี่ยหรือสถานะสุดท้ายของกลุ่มงาน",
+ "tags": [
+ "aggregate",
+ "status-service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/review-team/services/task-creation.service.ts",
+ "type": "file",
+ "name": "task-creation.service.ts",
+ "filePath": "modules/review-team/services/task-creation.service.ts",
+ "summary": "บริการสำหรับสร้างงานตรวจสอบแบบขนาน โดยใช้ข้อมูลจาก review-team และ entities ต่าง ๆ เพื่อจัดสรรงานให้สมาชิกทีมอย่างเหมาะสม มีเมธอดหลักคือ createParallelTasks และ areAllTasksCompleted",
+ "tags": [
+ "service",
+ "task-creation",
+ "parallel-tasks",
+ "review-team"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/user/entities/permission.entity.ts",
+ "type": "file",
+ "filePath": "modules/user/entities/permission.entity.ts",
+ "name": "permission.entity.ts",
+ "summary": "เอนทิตีสำหรับจัดเก็บข้อมูลสิทธิ์ (permissions) ของผู้ใช้งาน เช่น สิทธิ์ในการเข้าถึงหน่วยงานหรือฟังก์ชันต่าง ๆ",
+ "tags": [
+ "entity",
+ "permission"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/file-storage/file-cleanup.service.ts",
+ "type": "file",
+ "name": "file-cleanup.service.ts",
+ "filePath": "common/file-storage/file-cleanup.service.ts",
+ "summary": "บริการสำหรับทำความสะอาดไฟล์เก่าออกจากระบบ โดยตรวจสอบตามเงื่อนไข เช่น อายุของไฟล์ หรือสถานะใช้งานแล้วลบออกอัตโนมัติ เพื่อลดพื้นที่จัดเก็บและรักษาความปลอดภัย",
+ "tags": [
+ "service",
+ "cleanup"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/file-storage/file-storage.module.ts",
+ "type": "file",
+ "name": "file-storage.module.ts",
+ "filePath": "common/file-storage/file-storage.module.ts",
+ "summary": "โมดูลสำหรับจัดการการทำงานของระบบเก็บไฟล์ โดยกำหนดให้ใช้งานร่วมกับ service และ controller เพื่อควบคุม lifecycle การจัดเก็บและลบไฟล์อย่างปลอดภัย มีการนำเข้า entity สำหรับตัวแทนข้อมูลไฟล์ อ้างอิงไปยังบริการทำความสะอาดไฟล์เพื่อลบไฟล์เก่าออกตามกำหนด และเชื่อมโยงกับโมดูลผู้ใช้งาน",
+ "tags": [
+ "module",
+ "file-storage",
+ "nestjs-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:config/database.config.ts",
+ "type": "file",
+ "name": "database.config.ts",
+ "filePath": "config/database.config.ts",
+ "summary": "ไฟล์นี้จัดการกำหนดค่าเชื่อมต่อฐานข้อมูล โดยให้ run-seed.ts ใช้งานได้อย่างถูกต้องผ่านการนำเข้า configuration",
+ "tags": [
+ "database-configuration"
+ ],
+ "complex,": "simple",
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:database/seeds/organization.seed.ts",
+ "type": "file",
+ "name": "organization.seed.ts",
+ "filePath": "database/seeds/organization.seed.ts",
+ "summary": "ไฟล์นี้เก็บข้อมูลต้นแบบขององค์กร (organizations) ที่ใช้ในการเติมเต็มฐานข้อมูลเมื่อเริ่มระบบครั้งแรก",
+ "tags": [
+ "seed-data",
+ "organization"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:database/seeds/run-seed.ts",
+ "type": "file",
+ "name": "run-seed.ts",
+ "filePath": "database/seeds/run-seed.ts",
+ "summary": "ไฟล์นี้มีหน้าที่รันเซด (seed) ข้อมูลเริ่มต้นสำหรับระบบ โดยใช้ฟังก์ชัน runSeeds() เพื่อโหลดข้อมูลจากไฟล์ seed เช่น organization และ user เข้าสู่ฐานข้อมูล",
+ "tags": [
+ "database-seed",
+ "seed-runner",
+ "initial-data"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/contract/contract.controller.ts",
+ "type": "file",
+ "name": "contract.controller.ts",
+ "filePath": "modules/contract/contract.controller.ts",
+ "summary": "คลาส ContractController เป็นตัวควบคุม (controller) สำหรับจัดการ API เกี่ยวกับข้อตกลง โดยมีเมธอดหลัก เช่น create, findAll, findOne, update และ remove เพื่อรองรับการทำงานของระบบ CRUD",
+ "tags": [
+ "controller",
+ "api-handler",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/contract/contract.service.ts",
+ "type": "file",
+ "name": "contract.service.ts",
+ "filePath": "modules/contract/contract.service.ts",
+ "summary": "บริการสำหรับจัดการข้อมูลสัญญา โดยมีเมธอดรองรับการทำงานทั้งสร้าง อ่าน อัปเดต และลบ สัญญา พร้อมใช้งาน DTO และ Entity เพื่อประสานงานกับระบบอื่น ๆ",
+ "tags": [
+ "service",
+ "contract-management",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/contract/dto/create-contract.dto.ts",
+ "type": "file",
+ "name": "create-contract.dto.ts",
+ "filePath": "modules/contract/dto/create-contract.dto.ts",
+ "summary": "คลาส CreateContractDto เป็นโครงสร้างข้อมูลสำหรับการรับค่าอินพุตในการสร้างสัญญา โดยมีจุดประสงค์เพื่อกำหนดประเภทและรูปแบบของข้อมูลที่จำเป็นต้องใช้ในกระบวนการสร้างสัญญา",
+ "tags": [
+ "dto",
+ "create-contract"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/contract/dto/search-contract.dto.ts",
+ "type": "file",
+ "name": "search-contract.dto.ts",
+ "filePath": "modules/contract/dto/search-contract.dto.ts",
+ "summary": "คลาส SearchContractDto เป็นโครงสร้างข้อมูลสำหรับการค้นหาสัญญา โดยมีจุดประสงค์เพื่อเก็บและกำหนดรูปแบบของพารามิเตอร์ที่ใช้ในการค้นหา เช่น เงื่อนไขเริ่มต้น สิ้นสุด และประเภทของสัญญา",
+ "tags": [
+ "dto",
+ "search",
+ "contract"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/contract/dto/update-contract.dto.ts",
+ "type": "file",
+ "name": "update-contract.dto.ts",
+ "filePath": "modules/contract/dto/update-contract.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการอัปเดตสัญญา โดยมีคลาสชื่อ UpdateContractDto ที่ใช้ในการรับค่าจาก API request เพื่อยืนยันความถูกต้องของข้อมูลก่อนนำไปประมวลผล",
+ "tags": [
+ "dto",
+ "contract",
+ "update"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/contract/contract.module.ts",
+ "type": "file",
+ "name": "contract.module.ts",
+ "filePath": "modules/contract/contract.module.ts",
+ "summary": "โมดูลหลักสำหรับจัดการสัญญา โดยมีหน้าที่เชื่อมโยงระหว่าง controller และ service เพื่อให้ระบบสามารถทำงานร่วมกันได้อย่างเป็นระเบียบ มีการนำเข้าโมดูล project มาใช้งานเพื่อความสมบูรณ์ของข้อมูล",
+ "tags": [
+ "module",
+ "contract",
+ "nestjs-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/contract/entities/contract-organization.entity.ts",
+ "type": "file",
+ "name": "contract-organization.entity.ts",
+ "filePath": "modules/contract/entities/contract-organization.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับจัดการความสัมพันธ์ระหว่างสัญญาและองค์กร โดยใช้ชื่อคลาส ContractOrganization เพื่อบริหารข้อมูลเชิงโครงสร้างของความสัมพันธ์ดังกล่าว",
+ "tags": [
+ "entity",
+ "contract",
+ "organization",
+ "relation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/contract/entities/contract.entity.ts",
+ "type": "file",
+ "name": "contract.entity.ts",
+ "filePath": "modules/contract/entities/contract.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับโมดูล Contract โดยมีคลาสหลักชื่อ Contract ซึ่งใช้ในการจัดเก็บข้อมูลสัญญาต่างๆ เกี่ยวข้องกับโครงการและผู้ใช้งาน มีการนำเข้าจาก common/entities/uuid-base.entity.ts เพื่อให้มีคุณสมบัติ UUID และ entities/project.entity.ts เพื่อเชื่อมโยงกับข้อมูลโครงการ",
+ "tags": [
+ "entity",
+ "contract",
+ "database-model"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "type": "file",
+ "name": "asbuilt-drawing.entity.ts",
+ "filePath": "modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับคลาส AsBuiltDrawing โดยมีหน้าที่เก็บข้อมูลพื้นฐานของแบบแปลนด้านการก่อสร้างตามสภาพจริง (As-Built Drawing) เหมาะใช้งานร่วมกับโมดูล drawing และเชื่อมโยงไปยังข้อมูลอื่นๆ เช่น การแก้ไขเวอร์ชัน หมวดหมู่หลักและรองของแบบแปลน shop drawing โดยรวมเป็นหน่วยงานเดียวเพื่อใช้งานในระบบบริหารจัดการแบบแปลน",
+ "tags": [
+ "entity",
+ "as-built-drawing",
+ "drawing-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "type": "file",
+ "filePath": "modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "name": "asbuilt-drawing-revision.entity.ts",
+ "summary": "Entity สำหรับจัดการข้อมูลเวอร์ชันของแบบแปลนด้าน As-Built Drawing โดยเก็บรายละเอียดแต่ละรอบของการแก้ไขและอัปเดต เพื่อให้สามารถติดตามประวัติการเปลี่ยนแปลงได้อย่างแม่นยำ",
+ "tags": [
+ "revision-entity",
+ "drawing-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "file",
+ "name": "shop-drawing-revision.entity.ts",
+ "filePath": "modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "summary": "Entity สำหรับจัดการเวอร์ชันของแผนงานวาดภาพ โดยเก็บข้อมูลประวัติการแก้ไขและลำดับเวอร์ชันเพื่อรองรับการควบคุมเวอร์ชันได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "revision",
+ "drawing-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/drawing-master-data.controller.ts",
+ "type": "file",
+ "name": "drawing-master-data.controller.ts",
+ "filePath": "modules/drawing/drawing-master-data.controller.ts",
+ "summary": "คลาส DrawingMasterDataController เป็นคอนโทรลเลอร์หลักสำหรับจัดการข้อมูลพื้นฐานด้านวาดภาพ โดยมีเมธอดรองต่าง ๆ ที่ครอบคลุมการทำงาน CRUD (Create, Read, Update, Delete) เกี่ยวกับ Volume, Category, Contract Sub-Categories และ Shop Categories เช่น การสร้างหรืออัปเดตข้อมูลประเภทแผนผังงาน การจัดการรายละเอียดของแต่ละหมวดหมู่รวมถึงการเชื่อมโยงระหว่างรายการต่าง ๆ โดยใช้ Decorators สำหรับตรวจสอบสิทธิ์เข้าถึงและรักษาความปลอดภัยตาม RBAC",
+ "tags": [
+ "controller",
+ "drawing-master-data",
+ "crud-operation",
+ "middleware",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/drawing-master-data.service.ts",
+ "type": "file",
+ "name": "drawing-master-data.service.ts",
+ "filePath": "modules/drawing/drawing-master-data.service.ts",
+ "summary": "บริการหลักสำหรับจัดการข้อมูลพื้นฐานด้านการออกแบบ โดยครอบคลุมการทำงาน CRUD ของ Volume, Category และ Sub-category เกี่ยวกับสัญญาและร้านค้า มีการเชื่อมโยงกับ Entity ต่าง ๆ ในโมดูล drawing",
+ "tags": [
+ "service",
+ "drawing-master-data",
+ "crud-operation",
+ "volume-management",
+ "category-service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "type": "file",
+ "name": "contract-drawing-volume.entity.ts",
+ "filePath": "modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "summary": "Entity สำหรับจัดการหน่วยงาน (volume) ในแบบแปลนสัญญา เช่น การแบ่งเป็น volume เฉพาะด้านต่าง ๆ เพื่อความชัดเจนในการบริหารจัดการเอกสาร",
+ "tags": [
+ "drawing-module",
+ "volume"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/entities/contract-drawing-category.entity.ts",
+ "type": "file",
+ "name": "contract-drawing-category.entity.ts",
+ "filePath": "modules/drawing/entities/contract-drawing-category.entity.ts",
+ "summary": "Entity สำหรับการจัดเก็บข้อมูลหมวดหมู่ของแบบแปลงสัญญาในโมดูล drawing",
+ "tags": [
+ "entity",
+ "drawing-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "type": "file",
+ "name": "contract-drawing-subcat-cat-map.entity.ts",
+ "filePath": "modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "summary": "Entity สำหรับเก็บความสัมพันธ์ระหว่างหมวดหมู่และย่อยหมวดหมู่ของแบบแปลน ส่งเสริมการจัดระเบียบข้อมูลได้อย่างเป็นระบบ",
+ "tags": [
+ "drawing-module",
+ "relationship"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "type": "file",
+ "name": "contract-drawing-sub-category.entity.ts",
+ "filePath": "modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "summary": "Entity สำหรับการจัดเก็บข้อมูลย่อยหมวดหมู่ของแบบแปลงสัญญาในโมดูล drawing",
+ "tags": [
+ "entity",
+ "drawing-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "type": "file",
+ "name": "shop-drawing-main-category.entity.ts",
+ "filePath": "modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "summary": "Entity สำหรับจัดการหมวดหมู่หลักของแผนงานวาดภาพ โดยเก็บข้อมูลประเภทและลำดับชั้นของแต่ละหมวดหมู่ในระบบ",
+ "tags": [
+ "main-category",
+ "drawing-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "type": "file",
+ "name": "shop-drawing-sub-category.entity.ts",
+ "filePath": "modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "summary": "Entity สำหรับจัดการหมวดหมู่ย่อยของแผนงานวาดภาพ โดยเชื่อมโยงกับ Main Category เพื่อแบ่งกลุ่มข้อมูลได้อย่างละเอียดและเป็นระบบ",
+ "tags": [
+ "sub-category",
+ "drawing-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/drawing/drawing.module.ts",
+ "type": "file",
+ "filePath": "modules/drawing/drawing.module.ts",
+ "name": "drawing.module.ts",
+ "summary": "โมดูลสำหรับการจัดการงานด้านการออกแบบและการวาดภาพ โดยรองรับการทำงานร่วมกับเครื่องมือ AI ที่เกี่ยวข้อง",
+ "tags": [
+ "drawing-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "type": "file",
+ "name": "contract-drawing.entity.ts",
+ "filePath": "modules/drawing/entities/contract-drawing.entity.ts",
+ "summary": "คลาสสำหรับจัดการข้อมูล contract drawing ซึ่งเป็นเอกสารประเภทต่างๆ ในโครงการ โดยมีความเกี่ยวข้องกับ shop-drawing-revision เพื่อให้สามารถเชื่อมโยงข้อมูลได้อย่างครบถ้วน",
+ "tags": [
+ "contract-drawing",
+ "drawing"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "type": "file",
+ "name": "shop-drawing.entity.ts",
+ "filePath": "modules/drawing/entities/shop-drawing.entity.ts",
+ "summary": "ไฟล์นี้เป็น Entity สำหรับโมเดล ShopDrawing โดยมีการสืบทอดจาก UUIDBaseEntity และประกอบด้วยความสัมพันธ์กับตัวแปรอื่นๆ เช่น Main Category, Sub Category และ Revision เพื่อบริหารจัดการข้อมูลแบบวาดแผนงานในโครงการได้อย่างเป็นระบบ",
+ "tags": [
+ "entity",
+ "shop-drawing",
+ "drawing-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/project/entities/project-organization.entity.ts",
+ "type": "file",
+ "filePath": "modules/project/entities/project-organization.entity.ts",
+ "name": "project-organization.entity.ts",
+ "summary": "Entity ที่เชื่อมโยงระหว่างโปรเจกต์และองค์กร โดยแสดงความสัมพันธ์แบบหลายฝ่ายในระบบ",
+ "tags": [
+ "entity",
+ "relationship"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:scripts/migrate-storage-v2.ts",
+ "type": "file",
+ "name": "migrate-storage-v2.ts",
+ "filePath": "scripts/migrate-storage-v2.ts",
+ "summary": "ไฟล์นี้มีหน้าที่จัดการกระบวนการย้ายข้อมูลเก็บรักษา (storage migration) จากเวอร์ชันก่อนไปสู่เวอร์ชันใหม่ โดยใช้ฟังก์ชัน migrateStorage ซึ่งทำงานโดยอิงจากโมเดล attachment.entity และตัวแปรสภาพแวดล้อมจาก database.config เพื่อดำเนินการย้ายข้อมูลอย่างปลอดภัยและครบถ้วน",
+ "tags": [
+ "migration",
+ "storage",
+ "database"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/notification/dto/create-notification.dto.ts",
+ "type": "file",
+ "name": "create-notification.dto.ts",
+ "filePath": "modules/notification/dto/create-notification.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการสร้างการแจ้งเตือน โดยมีคลาสชื่อ CreateNotificationDto ที่ใช้ในการรับและตรวจสอบข้อมูลจาก API request เพื่อให้มั่นใจว่าข้อมูลครบถ้วนและอยู่ในรูปแบบที่ถูกต้อง",
+ "tags": [
+ "dto",
+ "notification",
+ "create"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/notification/dto/search-notification.dto.ts",
+ "type": "file",
+ "name": "search-notification.dto.ts",
+ "filePath": "modules/notification/dto/search-notification.dto.ts",
+ "summary": "ดิทโตสำหรับรับข้อมูลค้นหาข้อความแจ้งเตือนจาก service โดยกำหนดโครงสร้างของพารามิเตอร์ที่ต้องการใช้ในการค้นหา",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/notification/entities/notification.entity.ts",
+ "type": "file",
+ "name": "notification.entity.ts",
+ "filePath": "modules/notification/entities/notification.entity.ts",
+ "summary": "เอนทิตี้ของข้อความแจ้งเตือน ใช้แทนค่าข้อมูลในฐานข้อมูล โดยมีฟิลด์ต่าง ๆ เช่น title, message, user_id และ status",
+ "tags": [
+ "entity"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/notification/notification-cleanup.service.ts",
+ "type": "file",
+ "name": "notification-cleanup.service.ts",
+ "filePath": "modules/notification/notification-cleanup.service.ts",
+ "summary": "บริการสำหรับจัดการข้อมูลแจ้งเตือนเก่า ๆ เพื่อลดภาระระบบ โดยอาจมีหน้าที่ลบหรือทำลายข้อมูลตามเงื่อนไขบางอย่าง",
+ "tags": [
+ "service",
+ "cleanup"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/notification/notification.controller.ts",
+ "type": "file",
+ "name": "notification.controller.ts",
+ "filePath": "modules/notification/notification.controller.ts",
+ "summary": "Controller สำหรับจัดการ endpoint เกี่ยวกับแจ้งเตือน เช่น การสร้าง, อ่าน และอัปเดตข้อมูลแจ้งเตือนผู้ใช้",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/notification/notification.gateway.ts",
+ "type": "file",
+ "name": "notification.gateway.ts",
+ "filePath": "modules/notification/notification.gateway.ts",
+ "summary": "กัปตันสำหรับการสื่อสารระหว่างบริการแจ้งเตือนและผู้ใช้ปลายทาง เช่น เครือข่ายส่งข้อความ, push notification หรือ email โดยรับคำขอจาก service และส่งไปยังช่องทางที่กำหนด",
+ "tags": [
+ "gateway"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/notification/notification.processor.ts",
+ "type": "file",
+ "name": "notification.processor.ts",
+ "filePath": "modules/notification/notification.processor.ts",
+ "summary": "คลาส NotificationProcessor เป็นตัวจัดการกระบวนการแจ้งเตือน โดยรองรับการทำงานแบบ immediate และ digest (สรุปรายวัน) ผ่านหลายช่องทาง เช่น อีเมลและไลน์ มีการเชื่อมโยงกับโมดูล user เพื่อดึงข้อมูลผู้ใช้มาประมวลผล",
+ "tags": [
+ "notification",
+ "email",
+ "line",
+ "digest",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/user/entities/user-preference.entity.ts",
+ "type": "file",
+ "name": "user-preference.entity.ts",
+ "filePath": "modules/user/entities/user-preference.entity.ts",
+ "summary": "ไฟล์นี้เก็บข้อมูลความต้องการส่วนบุคคลของผู้ใช้งาน เช่น การจัดเรียงหน้าจอหรือภาษาที่ชอบ เพื่อปรับแต่งประสบการณ์การใช้งานให้เหมาะสม",
+ "tags": [
+ "entity",
+ "preference"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/dto/assign-role.dto.ts",
+ "type": "file",
+ "name": "assign-role.dto.ts",
+ "filePath": "modules/user/dto/assign-role.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลการจัดสรรบทบาทให้กับผู้ใช้งาน โดยระบุชื่อผู้ใช้และบทบาทที่ต้องการมอบหมาย",
+ "tags": [
+ "dto",
+ "role-assignment"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/dto/bulk-assignment.dto.ts",
+ "type": "file",
+ "name": "bulk-assignment.dto.ts",
+ "filePath": "modules/user/dto/bulk-assignment.dto.ts",
+ "summary": "DTO สำหรับการจัดสรรบทบาทจำนวนมากพร้อมกัน โดยรองรับ array ของผู้ใช้งานและบทบาทที่ต้องการมอบหมาย",
+ "tags": [
+ "dto",
+ "bulk-operation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/dto/create-user.dto.ts",
+ "type": "file",
+ "filePath": "modules/user/dto/create-user.dto.ts",
+ "name": "create-user.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการส่งคำขอสร้างผู้ใช้งานใหม่ โดยกำหนดรูปแบบและประเภทของฟิลด์ที่ต้องกรอก",
+ "tags": [
+ "dto",
+ "user-registration"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/dto/search-user.dto.ts",
+ "type": "file",
+ "filePath": "modules/user/dto/search-user.dto.ts",
+ "name": "search-user.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการค้นหาผู้ใช้งาน โดยระบุเงื่อนไขที่สามารถกรองได้ เช่น อีเมล ชื่อ เบอร์โทรศัพท์",
+ "tags": [
+ "dto",
+ "search-filter"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/dto/update-preference.dto.ts",
+ "type": "file",
+ "name": "update-preference.dto.ts",
+ "filePath": "modules/user/dto/update-preference.dto.ts",
+ "summary": "DTO สำหรับอัปเดตความชอบส่วนบุคคลของผู้ใช้งาน เช่น การแสดงผลหน้าจอ, เนื้อหาที่สนใจ",
+ "tags": [
+ "dto",
+ "user-preference"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/dto/update-user.dto.ts",
+ "type": "file",
+ "filePath": "modules/user/dto/update-user.dto.ts",
+ "name": "update-user.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการอัปเดตข้อมูลผู้ใช้งาน โดยระบุฟิลด์ที่สามารถแก้ไขได้และรูปแบบของแต่ละค่า",
+ "tags": [
+ "dto",
+ "user-update"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/user-assignment.service.ts",
+ "type": "file",
+ "name": "user-assignment.service.ts",
+ "filePath": "modules/user/user-assignment.service.ts",
+ "summary": "บริการสำหรับจัดสรรบทบาทและสิทธิ์ให้กับผู้ใช้งาน โดยเชื่อมโยงระหว่าง user.entity กับ role และ permission เพื่อให้มีระบบควบคุมสิทธิ์ที่ชัดเจน",
+ "tags": [
+ "service",
+ "assignment"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/user/user-preference.service.ts",
+ "type": "file",
+ "name": "user-preference.service.ts",
+ "filePath": "modules/user/user-preference.service.ts",
+ "summary": "บริการสำหรับจัดการความต้องการส่วนบุคคลของผู้ใช้งาน เช่น การปรับแต่งหน้าจอหรือภาษาที่ชอบ โดยอิงจากข้อมูลใน user-preference.entity",
+ "tags": [
+ "service",
+ "preference"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/user/user.controller.ts",
+ "type": "file",
+ "name": "user.controller.ts",
+ "filePath": "modules/user/user.controller.ts",
+ "summary": "คอนโทรลเลอร์หลักสำหรับจัดการ API ที่เกี่ยวข้องกับผู้ใช้งาน เช่น การลงทะเบียน เข้าสู่ระบบ และดูข้อมูลผู้ใช้ โดยเชื่อมโยงไปยังบริการต่าง ๆ เพื่อให้สามารถตอบสนองคำขอได้อย่างรวดเร็ว",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:database/seeds/ai-intent.seed.ts",
+ "type": "file",
+ "name": "ai-intent.seed.ts",
+ "filePath": "database/seeds/ai-intent.seed.ts",
+ "summary": "ไฟล์นี้มีหน้าที่สร้างข้อมูลเริ่มต้น (seed data) สำหรับระบบจัดประเภทเจตนาของ AI โดยใช้ฟังก์ชัน seedAiIntents() เพื่อเพิ่มข้อมูลในตาราง intent-definition เริ่มต้นเข้าสู่ฐานข้อมูล",
+ "tags": [
+ "seed-data",
+ "ai-intent-classifier",
+ "database-seed"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "type": "file",
+ "name": "intent-admin.controller.ts",
+ "filePath": "modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "summary": "คอนโทรลเลอร์สำหรับจัดการเจตนา (Intent) โดยตรง เช่น การเพิ่ม แก้ไข เปลี่ยนแปลงข้อมูลเจตนานั้น ๆ ในระบบ AI",
+ "tags": [
+ "controller",
+ "admin-interface"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/dto/create-intent-definition.dto.ts",
+ "type": "file",
+ "name": "create-intent-definition.dto.ts",
+ "filePath": "modules/ai/intent-classifier/dto/create-intent-definition.dto.ts",
+ "summary": "คลาส CreateIntentDefinitionDto ใช้สำหรับรับข้อมูลเข้าเพื่อสร้างนิยามเจตนา (intent definition) ในระบบ AI โดยมีการกำหนดโครงสร้างของข้อมูล เช่น เลือกประเภทเจตนาจาก enum และระบุชื่อเจตนา",
+ "tags": [
+ "dto",
+ "ai",
+ "intent-classifier"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/dto/create-intent-pattern.dto.ts",
+ "type": "file",
+ "name": "create-intent-pattern.dto.ts",
+ "filePath": "modules/ai/intent-classifier/dto/create-intent-pattern.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการสร้างรูปแบบเจตนา (intent pattern) โดยใช้ DTO ช่วยในการจัดรูปแบบข้อมูลที่ส่งเข้ามาในระบบ AI เพื่อจำแนจอารมณ์ของผู้ใช้งาน",
+ "tags": [
+ "dto",
+ "ai",
+ "intent-classifier",
+ "pattern"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/dto/update-intent-definition.dto.ts",
+ "type": "file",
+ "name": "update-intent-definition.dto.ts",
+ "filePath": "modules/ai/intent-classifier/dto/update-intent-definition.dto.ts",
+ "summary": "คลาส UpdateIntentDefinitionDto ใช้สำหรับรับข้อมูลอัปเดตคำสั่งงาน (intent definition) จากผู้ใช้งาน โดยมีโครงสร้างเฉพาะเจาะจงเพื่อกำหนดค่าที่สามารถแก้ไขได้ เช่น ชื่อคำสั่งงาน เนื้อหาคำสั่งงาน และตัวแปรเสริม อันเป็นส่วนสำคัญในการควบคุมการทำงานของระบบ AI",
+ "tags": [
+ "dto",
+ "intent-classifier",
+ "update"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/dto/update-intent-pattern.dto.ts",
+ "type": "file",
+ "name": "update-intent-pattern.dto.ts",
+ "filePath": "modules/ai/intent-Classifier/dto/update-intent-pattern.dto.ts",
+ "summary": "คลาส UpdateIntentPatternDto ใช้สำหรับรับข้อมูลอัปเดตแบบฟอร์มของรูปแบบการระบุเจตนา โดยเชื่อมโยงกับ enum จาก intent-category เพื่อกำหนดประเภทของการระบุเจตนา",
+ "tags": [
+ "dto",
+ "intent-classifier",
+ "update-pattern"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/controllers/intent-classify.controller.ts",
+ "type": "file",
+ "name": "intent-classify.controller.ts",
+ "filePath": "modules/ai/intent-classifier/controllers/intent-classify.controller.ts",
+ "summary": "คอนโทรลเลอร์หลักสำหรับการจัดประเภทเจตนาของข้อความผู้ใช้ โดยส่งคำขอไปยังบริการหลักเพื่อให้ AI วิเคราะห์และตอบกลับคืนเป็นหมวดหมู่เจตนานั้น ๆ",
+ "tags": [
+ "controller",
+ "intent-classify"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/dto/classify-query.dto.ts",
+ "type": "file",
+ "name": "classify-query.dto.ts",
+ "filePath": "modules/ai/intent-classifier/dto/classify-query.dto.ts",
+ "summary": "คลาส ClassifyQueryDto ใช้สำหรับกำหนดรูปแบบข้อมูลนำเข้าเพื่อให้อินเทนต์แคชเชอร์สามารถวิเคราะห์และจำแนกประเภทคำถามได้อย่างถูกต้อง มีโครงสร้างที่ชัดเจนเพื่อกำหนดค่าตัวแปรต่าง ๆ เช่น ข้อความคำถาม และตัวแปรเสริมอื่นๆ",
+ "tags": [
+ "dto",
+ "intent-classifier",
+ "ai"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "type": "file",
+ "name": "intent-definition.entity.ts",
+ "filePath": "modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "summary": "Entity สำหรับแสดงโครงสร้างข้อมูลเจตนา (Intent Definition) ในระบบจัดประเภทเจตนาของ AI โดยเก็บรายละเอียดเช่นรหัสเจตนาและหมวดหมู่",
+ "tags": [
+ "entity",
+ "intent-definition"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "file",
+ "name": "intent-category.enum.ts",
+ "filePath": "modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "summary": "อินเตอร์เฟซสำหรับนิยามหมวดหมู่ของเจตนา (Intent Category) โดยใช้ enum เพื่อกำหนดค่าคงที่ เช่น การขอข้อมูล แจ้งเตือน เป็นต้น",
+ "tags": [
+ "enum",
+ "intent-category"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/intent-definition.service.ts",
+ "type": "file",
+ "name": "intent-definition.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/intent-definition.service.ts",
+ "summary": "บริการสำหรับจัดการข้อมูลประเภทเจตนา (Intent Definition) โดยมีหน้าที่สร้าง ดูรายละเอียด เปลี่ยนแปลง และค้นหาข้อมูลตามรหัส โดยใช้ Entity และ Enum เพื่อให้งานทำงานได้อย่างแม่นยำ",
+ "tags": [
+ "service",
+ "intent-classifier",
+ "ai-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "type": "file",
+ "name": "intent-pattern.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "summary": "บริการสำหรับจัดการรูปแบบเจตนา (Intent Pattern) โดยมีหน้าที่สร้าง แก้ไข อัปเดต และลบข้อมูลรูปแบบเจตนาพร้อมตรวจสอบรูปแบบคำสั่งตามกฎระเบียบของ regex",
+ "tags": [
+ "service",
+ "intent-classifier",
+ "regex-validation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/interfaces/classification-result.interface.ts",
+ "type": "interface",
+ "name": "classification-result.interface.ts",
+ "filePath": "modules/ai/intent-classifier/interfaces/classification-result.interface.ts",
+ "summary": "อินเตอร์เฟซที่กำหนดโครงสร้างข้อมูลผลลัพธ์จากการจำแนกประเภทเจตนา (intent classification) ใช้ในการสื่อสารระหว่างบริการและโมดูลอื่น ๆ ในระบบ AI",
+ "tags": [
+ "interface",
+ "classification-result"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "type": "file",
+ "name": "intent-classifier.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "summary": "บริการหลักสำหรับการจำแนกเจตนาของข้อความ โดยใช้โมเดล AI ร่วมกับระบบ cache และ fallback เมื่อเกิดปัญหา เช่น การเชื่อมต่อกับ LLM เสียหาย",
+ "tags": [
+ "service",
+ "ai",
+ "intent-classifier",
+ "llm-fallback",
+ "classification"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "type": "file",
+ "name": "intent-pattern.entity.ts",
+ "filePath": "modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "summary": "Entity สำหรับแสดงโครงสร้างข้อมูลรูปแบบเจตนา (Intent Pattern) โดยเก็บรายละเอียดเช่นรหัสเจตนา เบอร์สาธารณะ และคำสั่งที่ใช้ตรวจสอบ",
+ "tags": [
+ "entity",
+ "intent-pattern"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "type": "file",
+ "name": "intent-classifier.module.ts",
+ "filePath": "modules/ai/intent-classifier/intent-classifier.module.ts",
+ "summary": "โมดูลนี้สร้างระบบจัดประเภทเจตนา (Intent Classification) โดยใช้โครงสร้างของ NestJS เพื่อจัดการบริการและคอนโทรลเลอร์ที่เกี่ยวข้อง เช่น การจัดกลุ่มคำสั่งผ่าน AI, การวิเคราะห์ข้อมูลเจตนา และการจัดเก็บประวัติการใช้งาน โดยนำเข้าบริการต่าง ๆ มาประกอบด้วย",
+ "tags": [
+ "module",
+ "intent-classifier",
+ "ai-service",
+ "nestjs"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/classification-audit.service.ts",
+ "type": "file",
+ "name": "classification-audit.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/classification-audit.service.ts",
+ "summary": "บริการสำหรับบันทึกเหตุการณ์การจำแนกเจตนาเพื่อวิเคราะห์และตรวจสอบประสิทธิภาพของระบบ",
+ "tags": [
+ "service",
+ "audit",
+ "classification"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/intent-pattern-cache.service.ts",
+ "type": "file",
+ "name": "intent-pattern-cache.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/intent-pattern-cache.service.ts",
+ "summary": "บริการสำหรับจัดเก็บข้อมูลรูปแบบเจตนาไว้ในแคช เพื่อลดภาระในการเข้าถึงฐานข้อมูลและเพิ่มประสิทธิภาพการทำงานของระบบ",
+ "tags": [
+ "cache-service",
+ "intent-pattern"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/llm-semaphore.service.ts",
+ "type": "file",
+ "name": "llm-semaphore.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/llm-semaphore.service.ts",
+ "summary": "บริการสำหรับจัดการ semaphore ของระบบ LLM โดยมีหน้าที่ควบคุมจำนวนคำขอพร้อมใช้งานได้ในเวลาเดียวกัน เพื่อป้องกันไม่ให้มีการเรียกร้องเกินกว่าความสามารถของโมเดล AI และช่วยรักษาสมดุลประสิทธิภาพระบบ",
+ "tags": [
+ "semaphore",
+ "llm",
+ "rate-limiting",
+ "ai-service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/ollama-client.service.ts",
+ "type": "file",
+ "name": "ollama-client.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/ollama-client.service.ts",
+ "summary": "บริการสำหรับจัดการการสื่อสารกับ Ollama เพื่อจำแนกเจตนาของข้อความ โดยมีเมธอดหลักคือ classifyIntent และ parseResponse ซึ่งใช้ในการประมวลผลคำขอและแปลผลลัพธ์จากโมเดล",
+ "tags": [
+ "service",
+ "ai",
+ "intent-classifier",
+ "ollama-client"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/services/pattern-matcher.service.ts",
+ "type": "file",
+ "name": "pattern-matcher.service.ts",
+ "filePath": "modules/ai/intent-classifier/services/pattern-matcher.service.ts",
+ "summary": "บริการสำหรับตรวจสอบรูปแบบข้อความเพื่อจัดประเภทเจตนา โดยมีเมธอดหลักคือ match และ isPatternMatch ใช้ในการเปรียบเทียบคำสั่งกับรูปแบบที่กำหนดไว้",
+ "tags": [
+ "service",
+ "intent-classifier",
+ "pattern-matching"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/controllers/numbering-metrics.controller.ts",
+ "type": "file",
+ "name": "numbering-metrics.controller.ts",
+ "filePath": "modules/document-numbering/controllers/numbering-metrics.controller.ts",
+ "summary": "คลาส NumberingMetricsController ใช้จัดการ endpoint เพื่อให้ข้อมูลสถิติของระบบตัวเลขเอกสาร โดยมีเมธอดหลักคือ getMetrics() และ constructor() ที่รับบริการจาก metrics.service.ts มาใช้งาน",
+ "tags": [
+ "controller",
+ "api-handler",
+ "metrics"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/services/metrics.service.ts",
+ "type": "file",
+ "name": "metrics.service.ts",
+ "filePath": "modules/document-numbering/services/metrics.service.ts",
+ "summary": "บริการสำหรับจัดการเมตริกของระบบตัวเลขเอกสาร โดยมีคลาส MetricsService ที่ใช้ในการสร้างและจัดเก็บข้อมูลต่าง ๆ เกี่ยวกับจำนวนเอกสาร และพฤติกรรมการใช้งานในแต่ละช่วงเวลา",
+ "tags": [
+ "service",
+ "metrics",
+ "document-numbering"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/dto/confirm-reservation.dto.ts",
+ "type": "file",
+ "name": "confirm-reservation.dto.ts",
+ "filePath": "modules/document-number- ing/dto/confirm-reservation.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับรับค่าใช้งานเมื่อยืนยันการจองหมายเลขเอกสาร",
+ "tags": [
+ "dto",
+ "reservation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/dto/counter-key.dto.ts",
+ "type": "file",
+ "name": "counter-key.dto.ts",
+ "filePath": "modules/document-number- ing/dto/counter-key.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับจัดการกุญแจตัวเลขที่ใช้ในการนับหมายเลขเอกสาร",
+ "tags": [
+ "dto",
+ "counter"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/dto/reserve-number.dto.ts",
+ "type": "file",
+ "name": "reserve-number.dto.ts",
+ "filePath": "modules/document-number- ing/dto/reserve-number.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับรับค่าใช้งานเมื่อจองหมายเลขเอกสาร",
+ "tags": [
+ "dto",
+ "reservation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/entities/document-number-audit.entity.ts",
+ "type": "file",
+ "name": "document-number-audit.entity.ts",
+ "filePath": "modules/document-numbering/entities/document-number-audit.entity.ts",
+ "summary": "ส่วนประกอบฐานข้อมูลสำหรับบันทึกประวัติการใช้งานเลขที่เอกสาร",
+ "tags": [
+ "entity",
+ "audit"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/entities/document-number-counter.entity.ts",
+ "type": "file",
+ "filePath": "modules/document-numbering/entities/document-number-counter.entity.ts",
+ "name": "document-number-counter.entity.ts",
+ "summary": "Entity สำหรับจัดเก็บข้อมูลตัวเลขเอกสารในระบบ โดยมีคีย์เป็น CounterKey และมีค่าตัวนับที่สามารถอัปเดตได้ตามความจำเป็น เช่น การรีเซ็ตหรือการเพิ่มนับใหม่",
+ "tags": [
+ "entity",
+ "document-number-counter"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/entities/document-number-error.entity.ts",
+ "type": "file",
+ "name": "document-number-error.entity.ts",
+ "filePath": "modules/document-numbering/entities/document-number-error.entity.ts",
+ "summary": "ส่วนประกอบฐานข้อมูลสำหรับบันทึกข้อผิดพลาดในการจัดเลขที่เอกสาร",
+ "tags": [
+ "entity",
+ "error"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/entities/document-number-reservation.entity.ts",
+ "type": "file",
+ "name": "document-number-reservation.entity.ts",
+ "filePath": "modules/document-number- ing/entities/document-number-reservation.entity.ts",
+ "summary": "Entity สำหรับเก็บข้อมูลการจองหมายเลขเอกสารในระบบ",
+ "tags": [
+ "entity",
+ "reservation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/interfaces/document-numbering.interface.ts",
+ "type": "file",
+ "name": "document-numbering.interface.ts",
+ "filePath": "modules/document-numbering/interfaces/document-numbering.interface.ts",
+ "summary": "อินเตอร์เฟซที่กำหนดโครงสร้างการทำงานของบริการจัดเลขที่เอกสาร",
+ "tags": [
+ "interface",
+ "contract"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/services/audit.service.ts",
+ "type": "file",
+ "name": "audit.service.ts",
+ "filePath": "modules/document-numbering/services/audit.service.ts",
+ "summary": "บริการสำหรับบันทึกเหตุการณ์การทับซ้อนเลขที่เอกสาร เพื่อใช้ตรวจสอบและย้อนกลับได้ในอนาคต",
+ "tags": [
+ "service",
+ "audit"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/services/counter.service.ts",
+ "type": "file",
+ "name": "counter.service.ts",
+ "filePath": "modules/document-number- ing/services/counter.service.ts",
+ "summary": "บริการสำหรับจัดการตัวเลขที่ใช้ในการนับหมายเลขเอกสาร โดยทำงานร่วมกับ ReservationService เพื่อให้มั่นใจว่าหมายเลขไม่ซ้ำกัน",
+ "tags": [
+ "service",
+ "counter"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/services/document-numbering-lock.service.ts",
+ "type": "file",
+ "name": "document-numbering-lock.service.ts",
+ "filePath": "modules/document-numbering/services/document-numbering-lock.service.ts",
+ "summary": "บริการจัดการล็อกเพื่อป้องกันการเข้าถึงข้อมูลเลขที่เอกสารพร้อมกันหลายรายโดยเดียวกัน (concurrency control)",
+ "tags": [
+ "service",
+ "lock"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/services/format.service.ts",
+ "type": "file",
+ "name": "format.service.ts",
+ "filePath": "modules/document-number- ing/services/format.service.ts",
+ "summary": "บริการสำหรับจัดรูปแบบหมายเลขเอกสาร เช่น การเติมศูนย์นำหน้า หรือแปลงรูปแบบตามมาตรฐานที่กำหนดไว้",
+ "tags": [
+ "service",
+ "format"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/document-numbering/services/manual-override.service.ts",
+ "type": "file",
+ "name": "manual-override.service.ts",
+ "filePath": "modules/document-numbering/services/manual-override.service.ts",
+ "summary": "บริการสำหรับจัดการการทับซ้อนค่าเลขที่เอกสารแบบมือถือ โดยใช้ข้อมูลจาก ManualOverrideDto และเชื่อมโยงกับระบบตรวจสอบ (AuditService) และนับลำดับ (CounterService)",
+ "tags": [
+ "service",
+ "manual-override",
+ "document-numbering"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/services/reservation.service.ts",
+ "type": "file",
+ "name": "reservation.service.ts",
+ "filePath": "modules/document-numbering/services/reservation.service.ts",
+ "summary": "บริการสำหรับจัดการการจองหมายเลขเอกสาร โดยมีเมธอดหลัก เช่น การจอง (reserve), ยืนยัน (confirm), เลื่อนเลิกใช้งาน (cancel) และทำความสะอาดข้อมูลเก่าออกจากระบบ",
+ "tags": [
+ "service",
+ "reservation",
+ "document-numbering"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/document-numbering/services/template.service.ts",
+ "type": "file",
+ "name": "template.service.ts",
+ "filePath": "modules/document-numbering/services/template.service.ts",
+ "summary": "บริการสำหรับจัดการแม่แบบเอกสารหมายเลข โดยมีคลาส TemplateService ที่รองรับการทำงานด้าน findTemplate เพื่อค้นหาแม่แบบตามเงื่อนไขต่าง ๆ และใช้ข้อมูลจาก entity document-number-format",
+ "tags": [
+ "service",
+ "document-numbering",
+ "template-service"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/common.module.ts",
+ "type": "file",
+ "filePath": "common/common.module.ts",
+ "name": "common.module.ts",
+ "summary": "โมดูลทั่วไปสำหรับการจัดการส่วนกลาง เช่น การตั้งค่าระบบ หรือบริการที่ใช้งานร่วมกันในหลายโมดูล",
+ "tags": [
+ "common"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:common/filters/global-exception.filter.ts",
+ "type": "file",
+ "name": "global-exception.filter.ts",
+ "filePath": "common/filters/global-exception.filter.ts",
+ "summary": "คลาส GlobalExceptionFilter ใช้จัดการข้อผิดพลาดทั่วไปในระบบ โดยมีหน้าที่รับและประมวลผลข้อผิดพลาดจาก API เซิร์ฟเวอร์ เช่น การแปลงสถานะ HTTP เป็นประเภทของข้อผิดพลาด (error type) และส่งข้อความแจ้งเตือนให้ผู้ใช้งานได้อย่างเหมาะสม",
+ "tags": [
+ "exception-filter",
+ "global-error-handling",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/interceptors/transform.interceptor.ts",
+ "type": "file",
+ "name": "transform.interceptor.ts",
+ "filePath": "common/interceptors/transform.interceptor.ts",
+ "summary": "ไฟล์นี้ให้บริการเป็น interceptor สำหรับแปลงข้อมูลที่ส่งกลับมาจาก API โดยมีฟังก์ชันตรวจสอบ payload หากต้องการใช้งาน pagination และมีคลาส TransformInterceptor ซึ่งทำงานเมื่อมีการเรียกดู endpoint เพื่อแปลงรูปแบบข้อมูลให้เหมาะสม",
+ "tags": [
+ "interceptor",
+ "transform",
+ "pagination"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/services/crypto.service.ts",
+ "type": "file",
+ "name": "crypto.service.ts",
+ "filePath": "common/services/crypto.service.ts",
+ "summary": "บริการทั่วไปสำหรับจัดการการทำงานด้านเข้ารหัส-ถอดรหัส โดยมีฟังก์ชันหลัก ๆ เช่น encrypt และ decrypt ใช้งานร่วมกับโมดูลอื่น ๆ เพื่อให้ความปลอดภัยของข้อมูลสอดคล้องตามมาตรฐาน",
+ "tags": [
+ "crypto",
+ "encryption-decryption"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/services/request-context.service.ts",
+ "type": "file",
+ "name": "request-context.service.ts",
+ "filePath": "common/services/request-context.service.ts",
+ "summary": "บริการจัดการข้อมูลบริบทคำขอ (Request Context) โดยมีเมธอดสำหรับตั้งค่าและดึงข้อมูล เช่น ไอดีผู้ใช้งาน และ ID การเรียกคำขอ เพื่อให้สามารถเข้าถึงข้อมูลได้อย่างปลอดภัยในทุกองค์ประกอบของแอปพลิเคชัน",
+ "tags": [
+ "service",
+ "request-context",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/exceptions/base.exception.ts",
+ "type": "file",
+ "filePath": "common/exceptions/base.exception.ts",
+ "name": "base.exception.ts",
+ "summary": "คลาสฐานสำหรับการจัดการข้อผิดพลาดทั่วไปในระบบ โดยให้โครงสร้างมาตรฐานแก่ Exception แต่ละประเภท เช่น การกำหนดโค้ดสถานะ (status code) และรายละเอียดข้อผิดพลาด",
+ "tags": [
+ "base-exception",
+ "error-handling"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "type": "file",
+ "filePath": "modules/ai/tool/ai-tool-registry.service.ts",
+ "name": "ai-tool-registry.service.ts",
+ "summary": "บริการสำหรับจัดเก็บและดูแลรายการเครื่องมือ AI ทั้งหมด โดยให้ความสามารถในการลงทะเบียน เรียกใช้งาน และตรวจสอบสถานะของแต่ละเครื่องมือได้อย่างยืดหยุ่น",
+ "tags": [
+ "registry-service",
+ "ai-tool"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/tool/drawing-tool.service.ts",
+ "type": "file",
+ "name": "drawing-tool.service.ts",
+ "filePath": "modules/ai/tool/drawing-tool.service.ts",
+ "summary": "บริการสำหรับจัดการการทำงานของเครื่องมือวาดภาพ โดยมีเมธอดหลักคือ getDrawing ที่ใช้ร่วมกับโมดูล shop-drawing.service เพื่อสร้างสรรค์ผลลัพธ์ตามคำขอ",
+ "tags": [
+ "service",
+ "ai-tool",
+ "drawing"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/tool/rfa-tool.service.ts",
+ "type": "file",
+ "name": "rfa-tool.service.ts",
+ "filePath": "modules/ai/tool/rfa-tool.service.ts",
+ "summary": "บริการสำหรับจัดการเครื่องมือ RFA (Request for Approval) โดยใช้ความสามารถในการเรียกใช้งาน API และประมวลผลข้อมูลจากโมดูล rfa พร้อมรองรับการทำงานแบบ asynchronous การสร้าง UUID และตรวจสอบสิทธิ์ผ่านระบบ CASL",
+ "tags": [
+ "service",
+ "ai-tool",
+ "rfa",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/tool/ai-tool.module.ts",
+ "type": "file",
+ "name": "ai-tool.module.ts",
+ "filePath": "modules/ai/tool/ai-tool.module.ts",
+ "summary": "โมดูลหลักสำหรับจัดการเครื่องมือ AI โดยรวม เก็บบริบทและกำหนดโครงสร้างการทำงานร่วมกันของต่างๆ เช่น การลงทะเบียนเครื่องมือ ความปลอดภัย และการเชื่อมโยงไปยังโมดูลเฉพาะทาง",
+ "tags": [
+ "module",
+ "ai-tool",
+ "registry-service",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "type": "file",
+ "name": "transmittal-tool.service.ts",
+ "filePath": "modules/ai/tool/transmittal-tool.service.ts",
+ "summary": "บริการสำหรับจัดการเครื่องมือส่งต่อข้อมูล (Transmittal Tool) โดยใช้คลาส TransmittalToolService ซึ่งรองรับการทำงานตามโครงสร้างของ tool-call-result.type และ transmittal-tool-result.type เพื่อให้สามารถส่งผลลัพธ์ไปยังโมดูลการส่งต่อข้อมูลได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "service",
+ "ai-tool",
+ "transmittal",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/tool/types/server-intent.enum.ts",
+ "type": "file",
+ "name": "server-intent.enum.ts",
+ "filePath": "modules/ai/tool/types/server-intent.enum.ts",
+ "summary": "ไฟล์โค้ดระบบ server-intent.enum.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/tool/types/tool-call-result.type.ts",
+ "type": "file",
+ "name": "tool-call-result.type.ts",
+ "filePath": "modules/ai/tool/types/tool-call-result.type.ts",
+ "summary": "ไฟล์โค้ดระบบ tool-call-result.type.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/tool/types/tool-handler-context.type.ts",
+ "type": "file",
+ "name": "tool-handler-context.type.ts",
+ "filePath": "modules/ai/tool/types/tool-handler-context.type.ts",
+ "summary": "ไฟล์โค้ดระบบ tool-handler-context.type.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/tool/types/drawing-tool-result.type.ts",
+ "type": "file",
+ "name": "drawing-tool-result.type.ts",
+ "filePath": "modules/ai/tool/types/drawing-tool-result.type.ts",
+ "summary": "ไฟล์โค้ดระบบ drawing-tool-result.type.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/tool/types/rfa-tool-result.type.ts",
+ "type": "file",
+ "name": "rfa-tool-result.type.ts",
+ "filePath": "modules/ai/tool/types/rfa-tool-result.type.ts",
+ "summary": "ไฟล์โค้ดระบบ rfa-tool-result.type.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/tool/types/transmittal-tool-result.type.ts",
+ "type": "file",
+ "name": "transmittal-tool-result.type.ts",
+ "filePath": "modules/ai/tool/types/transmittal-tool-result.type.ts",
+ "summary": "ไฟล์โค้ดระบบ transmittal-tool-result.type.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/json-schema/dto/create-json-schema.dto.ts",
+ "type": "file",
+ "name": "create-json-schema.dto.ts",
+ "filePath": "modules/json-schema/dto/create-json-schema.dto.ts",
+ "summary": "โครงสร้างข้อมูลแบบกำหนดรูปแบบ (DTO) สำหรับการสร้าง JSON Schema โดยระบุประเภทและชื่อฟิลด์ที่ต้องใช้ในการส่งข้อมูลเข้าระบบ",
+ "tags": [
+ "dto",
+ "create-operation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/json-schema/dto/migrate-data.dto.ts",
+ "type": "file",
+ "name": "migrate-data.dto.ts",
+ "filePath": "modules/json-schema/dto/migrate-data.dto.ts",
+ "summary": "DTO สำหรับรับข้อมูลที่ใช้ในการย้ายข้อมูล (migrate) จากฐานข้อมูลเก่าไปสู่โครงสร้างใหม่ตาม JSON Schema",
+ "tags": [
+ "dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/json-schema/dto/search-json-schema.dto.ts",
+ "type": "file",
+ "name": "search-json-schema.dto.ts",
+ "filePath": "modules/json-schema/dto/search-json-schema.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการค้นหา JSON Schema โดยระบุเงื่อนไขที่ใช้ในการกรองผลลัพธ์ เช่น code, version ฯลฯ",
+ "tags": [
+ "dto",
+ "search-operation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/json-schema/dto/update-json-schema.dto.ts",
+ "type": "file",
+ "name": "update-json-schema.dto.ts",
+ "filePath": "modules/json-schema/dto/update-json-schema.dto.ts",
+ "summary": "โครงสร้างข้อมูลสำหรับการอัปเดต JSON Schema โดยระบุฟิลด์ที่สามารถแก้ไขได้และตรวจสอบความถูกต้องก่อนดำเนินการเปลี่ยนแปลง",
+ "tags": [
+ "dto",
+ "update-operation"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/json-schema/entities/json-schema.entity.ts",
+ "type": "file",
+ "name": "json-schema.entity.ts",
+ "filePath": "modules/json-schema/entities/json-schema.entity.ts",
+ "summary": "Entity สำหรับแสดงโครงสร้างของ JSON Schema โดยมีคุณสมบัติที่เกี่ยวข้องกับการจัดการคอลัมน์เสมือนและการกำหนดประเภทข้อมูลในระบบฐานข้อมูล",
+ "tags": [
+ "entity",
+ "json-schema",
+ "database-model"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/json-schema/interfaces/ui-schema.interface.ts",
+ "type": "file",
+ "name": "ui-schema.interface.ts",
+ "filePath": "modules/json-schema/interfaces/ui-schema.interface.ts",
+ "summary": "อินเตอร์เฟซที่กำหนดโครงสร้างข้อมูลของ UI Schema เพื่อให้บริการสามารถทำงานร่วมกับระบบได้อย่างสอดคล้องกัน",
+ "tags": [
+ "interface",
+ "schema-interface"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/json-schema/interfaces/validation-result.interface.ts",
+ "type": "file",
+ "name": "validation-result.interface.ts",
+ "filePath": "modules/json-schema/interfaces/validation-result.interface.ts",
+ "summary": "อินเตอร์เฟซสำหรับผลลัพธ์จากการตรวจสอบข้อมูล JSON โดยระบุสถานะความถูกต้อง (valid/invalid) และรายละเอียดข้อผิดพลาดหากมี",
+ "tags": [
+ "validation-result-interface"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/json-schema/json-schema.controller.ts",
+ "type": "file",
+ "name": "json-schema.controller.ts",
+ "filePath": "modules/json-schema/json-schema.controller.ts",
+ "summary": "Controller สำหรับจัดการ endpoint เกี่ยวกับ JSON Schema โดยรองรับการทำงานด้านแสดงผลและการตอบสนองต่อคำขอจากผู้ใช้งาน",
+ "tags": [
+ "controller",
+ "api-handler"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/json-schema/json-schema.service.ts",
+ "type": "file",
+ "name": "json-schema.service.ts",
+ "filePath": "modules/json-schema/json-schema.service.ts",
+ "summary": "บริการหลักสำหรับจัดการ JSON Schema โดยให้เครื่องมือตรวจสอบและสร้างโครงสร้างข้อมูลตามมาตรฐานที่กำหนดไว้",
+ "tags": [
+ "json-schema",
+ "schema-validation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/json-schema/services/schema-migration.service.ts",
+ "type": "file",
+ "name": "schema-migration.service.ts",
+ "filePath": "modules/jsonschem/services/schema-migration.service.ts",
+ "summary": "บริการสำหรับจัดการกระบวนการย้ายข้อมูลตามโครงสร้าง JSON Schema โดยมีเมธอดหลักคือ migrateData และ applyMigrationStep ซึ่งใช้ในการปรับรูปแบบข้อมูลให้สอดคล้องกับ schema เวอร์ชันใหม่ ๆ",
+ "tags": [
+ "service",
+ "schema-migration",
+ "data-migration"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/json-schema/json-schema.module.ts",
+ "type": "file",
+ "name": "json-schema.module.ts",
+ "filePath": "modules/json-schema/json-schema.module.ts",
+ "summary": "โมดูลหลักสำหรับจัดการ JSON Schema โดยมีหน้าที่เชื่อมโยงบริการต่าง ๆ เช่น การจัดการความปลอดภัยและการย้ายโครงสร้างข้อมูล (schema migration) เข้าสู่ระบบ",
+ "tags": [
+ "module",
+ "json-schema",
+ "nestjs-module"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/json-schema/services/json-security.service.ts",
+ "type": "file",
+ "name": "json-security.service.ts",
+ "filePath": "modules/json-schema/services/json-security.service.ts",
+ "summary": "บริการสำหรับจัดการความปลอดภัยของข้อมูล JSON โดยใช้การเข้ารหัสและถอดรหัสค่าเฉพาะฟิลด์ที่กำหนดไว้ล่วงหน้า มีเมธอดหลัก ๆ เช่น encryptFields และ decryptAndFilterFields ซึ่งทำงานร่วมกับบริการ crypto.service เพื่อให้มั่นใจในความปลอดภัยของข้อมูล",
+ "tags": [
+ "security",
+ "encryption",
+ "json-processing",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/json-schema/services/ui-schema.service.ts",
+ "type": "file",
+ "name": "ui-schema.service.ts",
+ "filePath": "modules/json-schema/services/ui-schema.service.ts",
+ "summary": "บริการสำหรับจัดการโครงสร้างแบบฟอร์ม (UI Schema) โดยรองรับการทำงานเชิงตรรกะ เช่น การตรวจสอบความถูกต้องของ schema, การสร้าง schema ค่าเริ่มต้น และการแปลงข้อมูลให้เข้าใจง่ายสำหรับผู้ใช้งาน",
+ "tags": [
+ "service",
+ "ui-schema",
+ "validation",
+ "schema-generation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/json-schema/services/virtual-column.service.ts",
+ "type": "file",
+ "name": "virtual-column.service.ts",
+ "filePath": "modules/json-schema/services/virtual-column.service.ts",
+ "summary": "บริการสำหรับจัดการคอลัมน์เสมือนในโมเดล JSON Schema โดยมีหน้าที่สร้างและกำหนดโครงสร้างของคอลัมน์เสมือนตามประเภทข้อมูลต่าง ๆ และรองรับการทำงานกับดัชนี (index) เพื่อเพิ่มประสิทธิภาพการเรียกดูข้อมูล",
+ "tags": [
+ "service",
+ "virtual-column",
+ "json-schema",
+ "database-mapping"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/dsl/parser.service.ts",
+ "type": "file",
+ "name": "parser.service.ts",
+ "filePath": "modules/workflow-engine/dsl/parser.service.ts",
+ "summary": "บริการสำหรับการแปลงโครงสร้างภาษา DSL เป็นโมเดลการทำงานของระบบงาน โดยมีหน้าที่รับข้อมูลในรูปแบบ DSL และแปลงให้เป็นออบเจกต์ที่สามารถใช้งานได้จริง เช่น การตรวจสอบความถูกต้องของสถานะเครือข่าย (state machine) ก่อนสร้าง definition",
+ "tags": [
+ "parser",
+ "dsl",
+ "workflow-engine",
+ "validation"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/dsl/workflow-dsl.schema.ts",
+ "type": "file",
+ "name": "workflow-dsl.schema.ts",
+ "filePath": "modules/workflow-engine/dsl/workflow-dsl.schema.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างแบบจำลอง (schema) สำหรับ DSL (Domain Specific Language) ของระบบ workflow โดยมีการประกาศตัวแปรและสกิมาหลายอย่าง เช่น GuardSchema, EffectSchema และ TransitionSchema เพื่อใช้ในการจัดรูปแบบข้อมูลในแต่ละขั้นตอนของการทำงานของ workflow นอกจากนี้ยังรวมถึง WorkflowDslSchema ซึ่งเป็นโครงสร้างหลักที่ครอบคลุมการทำงานโดยรวม และมีตัวอย่างการใช้งาน (RFA_WORKFLOW_EXAMPLE) เพื่อให้ผู้พัฒนาสามารถเริ่มใช้งานได้อย่างรวดเร็ว",
+ "tags": [
+ "schema",
+ "workflow-engine",
+ "dsl"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:build-map.js",
+ "type": "file",
+ "name": "build-map.js",
+ "filePath": "build-map.js",
+ "summary": "ไฟล์นี้สร้างโครงสร้างแผนผังการวิเคราะห์ข้อมูล โดยมีฟังก์ชันหลักๆ เช่น generateSimpleNode, callOllama และ runAnalysis ที่ทำงานร่วมกันเพื่อจัดการผลลัพธ์จากโมเดล Ollama",
+ "tags": [
+ "analysis",
+ "node-generation",
+ "ollama-api"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/decorators/circuit-breaker.decorator.ts",
+ "type": "file",
+ "name": "circuit-breaker.decorator.ts",
+ "filePath": "/src/common/decorators/circuit- breaker.decorator.ts",
+ "summary": "ตัวช่วย (decorator) สำหรับการจัดการวงจรปิด (circuit breaking mechanism) ในระบบ API โดยใช้แนวทางแบบ Circuit Breaker เพื่อป้องกันไม่ให้เกิด overload จากเซิร์ฟเวอร์ปลายทางที่ล้มเหลวบ่อยครั้ง เน้นความทนทานของระบบทั้งหมดเมื่อมีข้อผิดพลาดจาก backend อ้างอิงไปยังบริการหรือ endpoint ต่างๆ โดยใช้ decorator เพื่อกำหนดพฤติกรรมในการจัดการวงจรปิดได้อย่างมีประสิทธิภาพ",
+ "tags": [
+ "decorator",
+ "circuit-breaker",
+ "error-handling"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/decorators/idempotency.decorator.ts",
+ "type": "file",
+ "name": "idempotency.decorator.ts",
+ "filePath": "common/decors/idempotency.decorator.ts",
+ "summary": "ตัวช่วยสำหรับการควบคุมความซ้ำซ้อนของคำขอ (Idempotency) โดยใช้ decorator เพื่อเพิ่มประสิทธิภาพการทำงานของ API และป้องกันข้อมูลที่ไม่ถูกต้องจากคำขอซ้ำ",
+ "tags": [
+ "decorator",
+ "idempotency",
+ "middleware"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/decorators/retry.decorator.ts",
+ "type": "file",
+ "name": "retry.decorator.ts",
+ "filePath": "common/decors/retry.decorator.ts",
+ "summary": "ตัวช่วย (decorator) เพื่อเพิ่มความสามารถในการลองทำซ้ำเมื่อมีข้อผิดพลาดเกิดขึ้น โดยใช้งานร่วมกับฟังก์ชันหรือเมธอดที่ต้องการให้มีการ retry หากล้มเหลว",
+ "tags": [
+ "decorator",
+ "retry",
+ "error-handling"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/exceptions/http-exception.filter.ts",
+ "type": "file",
+ "name": "http-exception.filter.ts",
+ "filePath": "/src/common/exceptions/http-exception.filter.ts",
+ "summary": "คลาส HttpExceptionFilter เป็นตัวกรองข้อยกเว้น (filter) ที่ใช้จัดการข้อผิดพลาด HTTP โดยตรง เช่น การแปลงข้อผิดพลาดเป็นสถานะ HTTP และตอบกลับแก่ผู้ขออย่างเหมาะสม มีเมธอด catch เพียงหนึ-เดียวซึ่งรับค่า error, host แล้วส่ง response ในรูปแบบที่กำหนดไว้",
+ "tags": [
+ "filter",
+ "exception-handling",
+ "http-error"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:common/utils/uuid-guard.ts",
+ "type": "file",
+ "name": "uuid-guard.ts",
+ "filePath": "/lcbp3-backend/common/utils/uuid-guard.ts",
+ "summary": "ไฟล์นี้มีหน้าที่ตรวจสอบค่า UUID โดยใช้ฟังก์ชัน assertUuid ซึ่งรับพารามิเตอร์เป็นสตริงและยืนยันว่าเป็นรูปแบบของ UUID เหมือนมาตรฐาน RFC4122 หากไม่ตรงตามรูปแบบจะโยนข้อผิดพลาดออกไป",
+ "tags": [
+ "uuid-validation",
+ "utility-function"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:config/bullmq.config.ts",
+ "type": "file",
+ "name": "bullmq.config.ts",
+ "filePath": "config/bullmq.config.ts",
+ "summary": "ไฟล์โค้ดระบบ bullmq.config.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:config/redis.config.ts",
+ "type": "file",
+ "name": "redis.config.ts",
+ "filePath": "config/redis.config.ts",
+ "summary": "ไฟล์โค้ดระบบ redis.config.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:database/migrations/1701676800000-v1-5-1-schema-update.ts",
+ "type": "file",
+ "name": "V1_5_1_Schema_Update1701676800000",
+ "filePath": "database/migrations/1701676800000-v1-5-1-schema-update.ts",
+ "summary": "ไฟล์นี้เป็น migration schema สำหรับอัปเดตโครงสร้างฐานข้อมูล โดยมีชื่อคลาส V1_5_1_Schema_Update1701676800000 มีเมธอด up และ down เพื่อกำหนดการเปลี่ยนแปลงโครงสร้างตารางในฐานข้อมูลในแต่ละเวอร์ชัน",
+ "tags": [
+ "migration",
+ "schema-update",
+ "database"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:database/migrations/initial-schema.ts",
+ "type": "file",
+ "name": "initial-schema.ts",
+ "filePath": "database/migrations/initial-schema.ts",
+ "summary": "ไฟล์นี้สร้างโครงสร้างฐานข้อมูลเริ่มต้นผ่าน migration โดยใช้คลาส InitialSchema1701234567890 ซึ่งประกอบด้วยเมธอด up และ down เพื่อกำหนดรูปแบบตารางในฐานข้อมูลและย้อนกลับได้ตามความจำเป็น",
+ "tags": [
+ "migration",
+ "database-schema",
+ "initial-setup"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/ai/dto/ai-job-result.dto.ts",
+ "type": "file",
+ "name": "ai-job-result.dto.ts",
+ "filePath": "modules/ai/dto/ai-job-result.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับผลลัพธ์การทำงานของระบบ AI โดยมีคลาส SuggestedTagDto และ AiJobResultDto ที่ใช้ในการจัดรูปแบบข้อมูลตอบกลับจากโมเดล AI",
+ "tags": [
+ "dto",
+ "ai-job-result",
+ "suggested-tag-dto"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/apply-profile.dto.ts",
+ "type": "file",
+ "name": "apply-profile.dto.ts",
+ "filePath": "modules/ai/dto/apply-profile.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการส่งคำขอเพื่อใช้งานโปรไฟล์ AI โดยมีคลาสชื่อ ApplyProfileDto ซึ่งใช้ในการรับและจัดเก็บข้อมูลที่จำเป็นต่อกระบวนการประมวลผลโปรไฟล์",
+ "tags": [
+ "dto",
+ "ai-profile",
+ "request-structure"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/apply-result.dto.ts",
+ "type": "file",
+ "name": "apply-result.dto.ts",
+ "filePath": "modules/ai/dto/apply-result.dto.ts",
+ "summary": "คลาส ApplyResultDto เป็นโครงสร้างข้อมูลสำหรับแสดงผลลัพธ์การสมัครบริการ AI โดยมีจุดประสงค์เพื่อให้แน่ใจว่าข้อมูลที่ส่งกลับมาเป็นไปตามรูปแบบมาตรฐาน และสามารถใช้งานได้อย่างปลอดภัยในระบบหลัก",
+ "tags": [
+ "dto",
+ "ai-service"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/dto/ocr-engine-selection.dto.ts",
+ "type": "file",
+ "name": "ocr-engine-selection.dto.ts",
+ "filePath": "modules/ai/dto/ocr-engine-selection.dto.ts",
+ "summary": "คลาส OcrEngineSelectionDto ใช้สำหรับกำหนดการเลือกเครื่องมือ OCR โดยให้ค่าตัวแปรที่จำเป็นในการระบุประเภทของเครื่องมือที่จะนำไปใช้งานได้อย่างชัดเจน",
+ "tags": [
+ "dto",
+ "ocr-engine-selection"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/entities/migration-review-queue.entity.ts",
+ "type": "file",
+ "name": "migration-review-queue.entity.ts",
+ "filePath": "modules/ai/entities/migration-review-queue.entity.ts",
+ "summary": "ไฟล์โค้ดระบบ migration-review-queue.entity.ts",
+ "tags": [
+ "utility",
+ "data-model",
+ "database"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/ai/intent-classifier/index.ts",
+ "type": "file",
+ "name": "index.ts",
+ "filePath": "modules/ai/intent-classifier/index.ts",
+ "summary": "ไฟล์โค้ดระบบ index.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "config:modules/ai/workflows/folder-watcher.json",
+ "type": "config",
+ "name": "folder-watcher.json",
+ "filePath": "modules/ai/workflows/folder-watcher.json",
+ "summary": "ไฟล์ตั้งค่าสำหรับ folder-watcher.json",
+ "tags": [
+ "configuration"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/common/constants/bullmq.constants.ts",
+ "type": "file",
+ "name": "bullmq.constants.ts",
+ "filePath": "modules/common/constants/bullmq.constants.ts",
+ "summary": "ไฟล์โค้ดระบบ bullmq.constants.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/correspondence/dto/create-routing-template.dto.ts",
+ "type": "file",
+ "name": "create-routing-template.dto.ts",
+ "filePath": "modules/correspond-pondance/dto/create-routing-template.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการสร้างแบบฟอร์มนำทาง (routing template) โดยแบ่งออกเป็นคลาสสองตัว ได้แก่ CreateRoutingTemplateStepDto และ CreateRoutingTemplateDto เพื่อใช้งานร่วมกับระบบจัดการเอกสารและกระบวนการส่งเอกสารภายในองค์กร",
+ "tags": [
+ "dto",
+ "routing-template",
+ "correspondence-module"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/dashboard/dto/dashboard-stats.dto.ts",
+ "type": "file",
+ "name": "dashboard-stats.dto.ts",
+ "filePath": "modules/dashboard/dto/dashboard-stats.dto.ts",
+ "summary": "คลาส DashboardStatsDto เป็นโครงสร้างข้อมูลสำหรับแสดงสถิติแดชบอร์ด โดยมีจุดประสงค์เพื่อเก็บและจัดรูปแบบข้อมูลต่าง ๆ ที่ใช้ในการแสดงผลในหน้าแดชบอร์ด",
+ "tags": [
+ "dto",
+ "dashboard-stats"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/dashboard/dto/get-activity.dto.ts",
+ "type": "file",
+ "name": "get-activity.dto.ts",
+ "filePath": "modules/dashboard/dto/get-activity.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการดึงข้อมูลกิจกรรม โดยมีคลาสสองตัวได้แก่ GetActivityDto และ ActivityItemDto ซึ่งใช้ในการแปลงและตรวจสอบรูปแบบข้อมูลที่เข้ามาในระบบ",
+ "tags": [
+ "dto",
+ "dashboard",
+ "activity"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/dashboard/dto/get-pending.dto.ts",
+ "type": "file",
+ "name": "get-pending.dto.ts",
+ "filePath": "modules/dashboard/dto/get-pending.dto.ts",
+ "summary": "ไฟล์นี้กำหนดโครงสร้างข้อมูลสำหรับการดึงรายการงานที่ยังไม่ได้รับการดำเนินการ โดยมีคลาสสองตัว คือ GetPendingDto และ PendingTaskItemDto เก็บรายละเอียดของแต่ละรายการงาน เช่น ID, title, status เป็นต้น",
+ "tags": [
+ "dto",
+ "dashboard",
+ "task-management"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/dashboard/dto/get-stats.dto.ts",
+ "type": "file",
+ "name": "get-stats.dto.ts",
+ "filePath": "modules/dashboard/dto/get-stats.dto.ts",
+ "summary": "คลาส GetStatsDto เป็นโครงสร้างข้อมูลสำหรับการรับค่าพารามิเตอร์ในการดึงสถิติจากแดชบอร์ด โดยมีจุดประสงค์เพื่อให้แน่ใจว่าข้อมูลที่ส่งเข้ามาถูกต้องตามรูปแบบที่กำหนดไว้",
+ "tags": [
+ "dto",
+ "dashboard",
+ "stats"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/rfa/dto/create-rfa-workflow.dto.ts",
+ "type": "file",
+ "name": "create-rfa-workflow.dto.ts",
+ "filePath": "modules/rfa/dto/create-rfa-workflow.dto.ts",
+ "summary": "คลาส CreateRfaWorkflowDto ใช้สำหรับกำหนดโครงสร้างข้อมูลในการสร้างงานเวิร์กโฟลว์ RFA โดยมีจุดประสงค์เพื่อให้มั่นใจว่าข้อมูลที่ส่งเข้ามาจะครบถ้วนและอยู่ในรูปแบบที่กำหนดไว้",
+ "tags": [
+ "dto",
+ "rfa-workflow",
+ "create"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:modules/workflow-engine/dsl/parallel-gateway.handler.ts",
+ "type": "file",
+ "name": "parallel-gateway.handler.ts",
+ "filePath": "modules/workflow- engine/dsl/parallel-gateway.handler.ts",
+ "summary": "คลาส ParallelGatewayHandler ใช้จัดการกับประตูขนาน (Parallel Gateway) ในระบบ workflow โดยมีเมธอดสำคัญ เช่น canAdvance เพื่อตรวจสอบว่าสามารถดำเนินต่อไปได้หรือไม่ createContext เพื่อกำหนดบริบทการทำงาน และ markBranchComplete เพื่อบันทึกการเสร็จสิ้นแต่ละสาขาของงาน",
+ "tags": [
+ "workflow-engine",
+ "parallel-gateway",
+ "gateway-handler",
+ "dsl"
+ ],
+ "complexity": "moderate"
+ },
+ {
+ "id": "file:modules/workflow-engine/dto/get-available-actions.dto.ts",
+ "type": "file",
+ "name": "get-available-actions.dto.ts",
+ "filePath": "modules/workflow-engine/dto/get-available-actions.dto.ts",
+ "summary": "คลาส GetAvailableActionsDto เป็นโครงสร้างข้อมูลสำหรับการรับคำขอเพื่อดูรายการ action ที่ใช้งานได้ในระบบ workflow โดยมีจุดประสงค์ในการกำหนดช่วงเวลาและเงื่อนไขต่าง ๆ เพื่อให้สามารถเลือกใช้งาน action ตามความเหมาะสม",
+ "tags": [
+ "dto",
+ "workflow-engine"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:redlock.d.ts",
+ "type": "file",
+ "name": "redlock.d.ts",
+ "filePath": "redlock.d.ts",
+ "summary": "ไฟล์โค้ดระบบ redlock.d.ts",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "config:.understand-anything/meta.json",
+ "type": "config",
+ "name": "meta.json",
+ "filePath": ".understand-anything/meta.json",
+ "summary": "ไฟล์ตั้งค่าสำหรับ meta.json",
+ "tags": [
+ "configuration"
+ ],
+ "complexity": "simple"
+ },
+ {
+ "id": "file:.understand-anything/.understandignore",
+ "type": "file",
+ "name": ".understandignore",
+ "filePath": ".understand-anything/.understandignore",
+ "summary": "ไฟล์โค้ดระบบ .understandignore",
+ "tags": [
+ "utility"
+ ],
+ "complexity": "simple"
+ }
+ ],
+ "edges": [
+ {
+ "source": "file:app.module.ts",
+ "target": "file:app.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:common/config/env.validation.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:common/config/redis.config.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:common/guards/maintenance-mode.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:common/interceptors/idempotency.interceptor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:common/resilience/resilience.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/monitoring/logger/winston.config.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/guards/maintenance-mode.guard.ts",
+ "target": "file:common/decorators/bypass-maintenance.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:main.ts",
+ "target": "file:app.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:main.ts",
+ "type": "exports",
+ "direction": "backward",
+ "weight": 0.3
+ },
+ {
+ "source": "file:modules/auth/entities/role.entity.ts",
+ "target": "file:common/entities/base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/entities/base.entity.ts",
+ "target": "file:modules/auth/entities/role.entity.ts",
+ "type": "extends",
+ "direction": "backward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.controller.ts",
+ "target": "file:common/decorators/bypass-maintenance.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.controller.ts",
+ "target": "file:modules/monitoring/dto/set-maintenance.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:src/app.controller.ts",
+ "target": "file:src/app.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:src/app.service.ts",
+ "target": "file:src/app.controller.ts",
+ "type": "uses",
+ "direction": "backward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.module.ts",
+ "target": "file:modules/monitoring/monitoring.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.module.ts",
+ "target": "file:modules/monitoring/services/metrics.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/organization/dto/update-organization.dto.ts",
+ "target": "file:modules/organization/dto/create-organization.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/organization/organization.controller.ts",
+ "target": "file:modules/organization/dto/create-organization.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/organization/organization.controller.ts",
+ "target": "file:modules/organization/dto/search-organization.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/organization/organization.controller.ts",
+ "target": "file:modules/organization/dto/update-organization.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/organization/organization.controller.ts",
+ "target": "file:modules/organization/organization.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/organization/organization.module.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/organization/organization.module.ts",
+ "target": "file:modules/organization/entities/organization-role.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/organization/organization.module.ts",
+ "target": "file:modules/organization/organization.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/organization/organization.module.ts",
+ "target": "file:modules/organization/organization.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/organization/organization.service.ts",
+ "target": "file:modules/organization/dto/create-organization.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/organization/organization.service.ts",
+ "target": "file:modules/organization/dto/update-organization.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/organization/organization.service.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/tags/entities/correspondence-tag.entity.ts",
+ "target": "file:modules/tags/entities/tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/tags/tags.controller.ts",
+ "target": "file:modules/tags/dto/create-tag.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/tags/tags.controller.ts",
+ "target": "file:modules/tags/tags.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/tags/tags.module.ts",
+ "target": "file:modules/tags/entities/correspondence-tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/tags/tags.module.ts",
+ "target": "file:modules/tags/entities/tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/tags/tags.module.ts",
+ "target": "file:modules/tags/tags.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/tags/tags.module.ts",
+ "target": "file:modules/tags/tags.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/tags/tags.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/tags/tags.service.ts",
+ "target": "file:modules/tags/entities/tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/tags/tags.service.ts",
+ "target": "file:modules/tags/entities/correspondence-tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:common/auth/guards/permissions.guard.ts",
+ "target": "file:common/auth/casl/ability.factory.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/auth/guards/permissions.guard.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:common/auth/strategies/jwt-refresh.strategy.ts",
+ "target": "file:common/auth/strategies/jwt.strategy.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/auth/strategies/jwt.strategy.ts",
+ "target": "file:common/auth/strategies/jwt.strategy.ts",
+ "type": "exports",
+ "direction": "backward",
+ "weight": 1
+ },
+ {
+ "source": "file:common/file-storage/file-storage.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/file-storage/file-storage.controller.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:common/file-storage/file-storage.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:common/file-storage/file-storage.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:common/file-storage/file-storage.controller.ts",
+ "target": "file:common/interfaces/request-with-user.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:common/guards/rbac.guard.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/interceptors/audit-log.interceptor.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/interceptors/audit-log.interceptor.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-analytics.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-analytics.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-analytics.controller.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-analytics.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:modules/ai/prompts/dto/create-ai-prompt.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:modules/ai/prompts/dto/update-prompt-note.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:modules/ai/prompts/dto/ai-prompt-response.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.controller.ts",
+ "target": "file:modules/audit-log/audit-log.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:src/common/auth/auth.controller.ts",
+ "target": "file:src/common/auth/auth.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:src/common/auth/auth.controller.ts",
+ "target": "file:src/common/auth/dto/login.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:src/common/auth/auth.controller.ts",
+ "target": "file:src/common/auth/dto/register.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:src/common/auth/auth.controller.ts",
+ "target": "file:src/common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:src/common/auth/auth.controller.ts",
+ "target": "file:src/common/guards/jwt-refresh.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:src/common/auth/auth.controller.ts",
+ "target": "file:src/common/interfaces/request-with-user.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:src/common/auth/auth.module.ts",
+ "target": "file:src/common/auth/auth.controller.ts",
+ " type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:src/common/auth/auth.module.ts",
+ "target": "file:src/common/auth/auth.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:src/common/auth/auth.module.ts",
+ "target": "file:src/common/auth/session.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.55
+ },
+ {
+ "source": "file:src/common/auth/auth.module.ts",
+ "target": "file:src/modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:src/common/auth/auth.service.ts",
+ "target": "file:src/common/auth/dto/register.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:src/common/auth/auth.service.ts",
+ "target": "file:src/modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:src/common/auth/session.controller.ts",
+ "target": "file:src/common/auth/auth.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:src/common/auth/session.controller.ts",
+ "target": "file:src/common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:src/common/auth/session.controller.ts",
+ "target": "file:src/common/interfaces/request-with-user.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:src/common/auth/session.controller.ts",
+ "target": "file:src/modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:modules/circulation/circulation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:modules/circulation/dto/create-circulation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:modules/circulation/dto/force-close-circulation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:modules/circulation/dto/reassign-routing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:modules/circulation/dto/search-circulation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:modules/circulation/dto/update-circulation-routing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/correspondence.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/dto/add-reference.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/dto/bulk-cancel.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/dto/cancel-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/dto/create-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/dto/search-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/dto/submit-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/dto/update-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:modules/correspondence/dto/workflow-action.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai-settings.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai-validation.service.ts",
+ "target": "file:modules/ai/dto/ai-callback.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/ai-ingest.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/ai-migration-checkpoint.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/ai-queue.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/ai-rag.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/ai.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/ai-settings.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/add-ai-model.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/ai-admin-settings.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/ai-callback.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/ai-intent-request.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/ai-job-response.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/ai-rag-query.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/ai.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/ai-ingest.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/ai-migration-checkpoint.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/ai-queue.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/ai-rag.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/ai.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/ai-settings.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/ai-validation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/ai-settings.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/ai-validation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/activate-ai-model.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/add-ai-model.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/ai-callback.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/ai-job-response.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/dto/legacy-migration.dto.ts",
+ "target": "file:modules/ai/entities/migration-review.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/dto/migration-checkpoint.dto.ts",
+ "target": "file:modules/ai/entities/migration-progress.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/entities/migration-log.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/entities/migration-review.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/guards/ai-enabled.guard.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/guards/ai-enabled.guard.ts",
+ "target": "file:modules/ai/ai-settings.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-analytics.service.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/interfaces/ocr-residency.interface.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/ai-rag.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/processors/ai-realtime.processor.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/processors/rag.processor.ts",
+ "target": "file:modules/ai/ai-queue.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/processors/rag.processor.ts",
+ "target": "file:modules/ai/ai-rag.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/processors/typhoon-llm.processor.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/services/sandbox-ocr-engine.service.ts",
+ "target": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "type": "uses",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/ai/services/ocr-cache.service.ts",
+ "target": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "type": "uses",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/ai/services/vram-monitor.service.ts",
+ "target": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "type": "monitors",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/ai/processors/vector-deletion.processor.ts",
+ "target": "file:modules/ai/qdrant.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/processors/vector-deletion.processor.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.module.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.module.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.module.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "target": "file:modules/ai/prompts/dto/create-ai-prompt.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/services/embedding.service.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/services/embedding.service.ts",
+ "target": "file:modules/ai/qdrant.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/services/embedding.service.ts",
+ "target": "file:modules/ai/services/ocr.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/services/embedding.service.ts",
+ "target": "file:modules/ai/services/ollama.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/ai/services/migration.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/services/ai-policy.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/services/ocr-cache.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/services/vram-monitor.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/services/sandbox-ocr-engine.service.ts",
+ "target": "file:modules/ai/services/ocr.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.module.ts",
+ "target": "file:modules/audit-log/audit-log.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.module.ts",
+ "target": "file:modules/audit-log/audit-log.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/workers/cleanup-temp-files.worker.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/ai/ai-queue.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/correspondence.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/due-date-reminder.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-reference.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-reference.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.3
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.3
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.3
+ },
+ {
+ "source": "file:modules/correspondence/due-date-reminder.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-reference.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-sub-type.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-tag.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/dto/update-tag.dto.ts",
+ "target": "file:modules/master/dto/create-tag.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/entities/tag.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/master/dto/create-discipline.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/master/dto/create-sub-type.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/master/dto/create-tag.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/master/dto/save-number-format.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/master/dto/search-tag.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/master/dto/update-tag.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/master/service/master.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/rfa/entities/rfa-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/master/entities/tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/master/master.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/master/master.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/rfa/entities/rfa-approve-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/rfa/entities/rfa-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/rfa/entities/rfa-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/master/dto/create-discipline.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/master/dto/create-sub-type.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/master/dto/create-tag.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/master/dto/save-number-format.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/master/dto/search-tag.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/master/dto/update-tag.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/master/entities/tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/rfa/entities/rfa-approve-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/rfa/entities/rfa-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/rfa/entities/rfa-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/dto/commit-batch.dto.ts",
+ "target": "file:modules/migration/dto/import-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/delegation/delegation.controller.ts",
+ "target": "file:common/auth/guards/permissions.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/delegation/delegation.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/delegation/delegation.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/delegation/delegation.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/delegation/delegation.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/delegation/delegation.controller.ts",
+ "target": "file:modules/delegation/delegation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/delegation/delegation.controller.ts",
+ "target": "file:modules/delegation/dto/create-delegation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "target": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering.controller.ts",
+ "target": "file:modules/document-numbering/dto/preview-number.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering.controller.ts",
+ "target": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/create-asbuilt-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/create-asbuilt-drawing-revision.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/search-asbuilt-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:modules/drawing/contract-drawing.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/create-contract-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/search-contract-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/update-contract-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/create-shop-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/create-shop-drawing-revision.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:modules/drawing/dto/search-shop-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.68
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:modules/drawing/shop-drawing.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/migration/migration-review.controller.ts",
+ "target": "file:modules/migration/dto/commit-migration-review.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration-review.controller.ts",
+ "target": "file:modules/migration/migration-review.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/project/project.controller.ts",
+ "target": "file:modules/project/dto/update-project.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/project/project.controller.ts",
+ "target": "file:modules/project/project.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/project/project.service.ts",
+ "target": "file:modules/project/dto/update-project.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/project/project.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:modules/review-team/dto/shared/review-team.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:modules/review-team/review-task.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:modules/review-team/services/consensus.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:modules/review-team/services/veto-override.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.controller.ts",
+ "target": "file:modules/review-team/dto/shared/review-team.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/review-team/review-team.controller.ts",
+ "target": "file:modules/review-team/review-team.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/rfa/dto/update-rfa.dto.ts",
+ "target": "file:modules/rfa/dto/create-rfa-revision.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:modules/project/project.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:modules/rfa/dto/create-rfa.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:modules/rfa/dto/search-rfa.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:modules/rfa/dto/submit-rfa.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:modules/rfa/dto/update-rfa.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:modules/rfa/rfa.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/transmittal/dto/search-transmittal.dto.ts",
+ "target": "file:modules/transmittal/dto/create-transmittal.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:modules/project/project.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:modules/transmittal/dto/create-transmittal.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:modules/transmittal/dto/search-transmittal.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:modules/transmittal/transmittal.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/migration/dto/commit-migration-review.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/migration/entities/import-transaction.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:modules/migration/dto/commit-batch.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:modules/migration/dto/create-migration-error.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:modules/migration/dto/enqueue-migration.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:modules/migration/dto/import-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:modules/migration/dto/migration-queue-query.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:modules/migration/migration.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/migration/entities/import-transaction.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/migration/entities/migration-error.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/migration/migration.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/migration/migration.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/migration/migration-review.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/migration/workers/expire-pending-reviews.worker.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/migration/dto/commit-batch.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/migration/dto/create-migration-error.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/migration/dto/enqueue-migration.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/migration/dto/import-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/migration/dto/migration-queue-query.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/migration/entities/import-transaction.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/migration/entities/migration-error.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/migration/workers/expire-pending-reviews.worker.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/migration/workers/expire-pending-reviews.worker.ts",
+ "target": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/migration/workers/expire-pending-reviews.worker.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-approve-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-item.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-workflow.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-workflow-template.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "target": "file:modules/user/entities/role.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-workflow.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-workflow.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-workflow.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa-workflow.service.ts",
+ "target": "file:modules/rfa/entities/rfa-approve-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/rfa/rfa-workflow.service.ts",
+ "target": "file:modules/rfa/entities/rfa.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/rfa/rfa-workflow.service.ts",
+ "target": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/rfa/rfa-workflow.service.ts",
+ "target": "file:modules/rfa/entities/rfa-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/rfa/rfa-workflow.service.ts",
+ "target": "file:modules/workflow-engine/dto/workflow-transition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/rfa/rfa-workflow.service.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1.2
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/project/project.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa-approve-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa-item.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa-workflow.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa-workflow-template.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/rfa.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/rfa-workflow.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/search/search.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/entities/rfa-approve-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/entities/rfa.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/entities/rfa-item.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/entities/rfa-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/entities/rfa-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/search/search.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/search/search.controller.ts",
+ "target": "file:modules/search/dto/search-query.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/search/search.controller.ts",
+ "target": "file:modules/search/search.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/search/search.module.ts",
+ "target": "file:modules/search/search.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/search/search.module.ts",
+ "target": "file:modules/search/search.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/search/search.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.3
+ },
+ {
+ "source": "file:modules/search/search.service.ts",
+ "target": "file:modules/search/dto/search-query.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/transmittal/entities/transmittal-item.entity.ts",
+ "target": "file:modules/transmittal/entities/transmittal.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/transmittal/entities/transmittal.entity.ts",
+ "target": "file:modules/transmittal/entities/transmittal-item.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/project/project.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/search/search.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/transmittal/entities/transmittal.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/transmittal/entities/transmittal-item.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/transmittal/transmittal.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/transmittal/transmittal.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/transmittal/dto/create-transmittal.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/transmittal/dto/search-transmittal.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/transmittal/entities/transmittal.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/transmittal/entities/transmittal-item.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/delegation/delegation.module.ts",
+ "target": "file:common/auth/casl/casl.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/delegation/delegation.module.ts",
+ "target": "file:modules/delegation/delegation.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/delegation/delegation.module.ts",
+ "target": "file:modules/delegation/delegation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/delegation/delegation.module.ts",
+ "target": "file:modules/delegation/entities/delegation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/delegation/delegation.module.ts",
+ "target": "file:modules/delegation/services/circular-detection.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/delegation/delegation.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/delegation/delegation.service.ts",
+ "target": "file:modules/delegation/dto/create-delegation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/delegation/delegation.service.ts",
+ "target": "file:modules/delegation/entities/delegation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/delegation/delegation.service.ts",
+ "target": "file:modules/delegation/services/circular-detection.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/delegation/dto/create-delegation.dto.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/delegation/entities/delegation.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/delegation/entities/delegation.entity.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/delegation/services/circular-detection.service.ts",
+ "target": "file:modules/delegation/entities/delegation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/distribution-matrix.service.ts",
+ "target": "file:modules/distribution/dto/add-distribution-recipient.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/distribution-matrix.service.ts",
+ "target": "file:modules/distribution/dto/create-distribution-matrix.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/distribution/distribution-matrix.service.ts",
+ "target": "file:modules/distribution/dto/update-distribution-matrix.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/distribution-matrix.service.ts",
+ "target": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/distribution/distribution-matrix.service.ts",
+ "target": "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/distribution/distribution.controller.ts",
+ "target": "file:modules/distribution/distribution-matrix.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/distribution/distribution.controller.ts",
+ "target": "file:modules/distribution/dto/add-distribution-recipient.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/distribution/distribution.controller.ts",
+ "target": "file:modules/distribution/dto/create-distribution-matrix.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/distribution.controller.ts",
+ "target": "file:modules/distribution/dto/update-distribution-matrix.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/distribution/distribution.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/distribution/distribution-matrix.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/distribution/distribution.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/distribution/processors/distribution.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/distribution/services/approval-listener.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/document-numbering/document-numbering.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/notification/notification.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/distribution/dto/update-distribution-matrix.dto.ts",
+ "target": "file:modules/distribution/dto/create-distribution-matrix.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "target": "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "target": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/distribution/processors/distribution.processor.ts",
+ "target": "file:modules/distribution/distribution.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/distribution/processors/distribution.processor.ts",
+ "target": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/distribution/processors/distribution.processor.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/distribution/services/approval-listener.service.ts",
+ "target": "file:modules/distribution/distribution.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/reminder/entities/reminder-history.entity.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/reminder/entities/reminder-history.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/reminder/processors/reminder.processor.ts",
+ "target": "file:modules/reminder/services/escalation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/reminder/processors/reminder.processor.ts",
+ "target": "file:modules/reminder/services/scheduler.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/reminder/processors/reminder.processor.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/reminder/reminder.controller.ts",
+ "target": "file:modules/reminder/dto/create-reminder-rule.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/reminder/reminder.controller.ts",
+ "target": "file:modules/reminder/reminder.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/reminder/entities/reminder-history.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/reminder/processors/reminder.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/reminder/reminder.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/reminder/reminder.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/reminder/services/escalation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/reminder/services/scheduler.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "references",
+ "direction": "backward",
+ "weight": 0.3
+ },
+ {
+ "source": "file:modules/project/entities/project.entity.ts",
+ "target": "file:modules/user/entities/role.entity.ts",
+ "type": "references",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/user/entities/user-assignment.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "references",
+ "direction": "backward",
+ "weight": 0.3
+ },
+ {
+ "source": "file:modules/reminder/reminder.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/reminder/reminder.service.ts",
+ "target": "file:modules/reminder/dto/create-reminder-rule.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/reminder/reminder.service.ts",
+ "target": "file:modules/reminder/entities/reminder-history.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/reminder/reminder.service.ts",
+ "target": "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/reminder/reminder.service.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/circulation/circulation-workflow.service.ts",
+ "target": "file:modules/circulation/entities/circulation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation-workflow.service.ts",
+ "target": "file:modules/circulation/entities/circulation-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/circulation/circulation.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/circulation/circulation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/circulation/circulation-workflow.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/circulation/entities/circulation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/circulation/entities/circulation-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/circulation/dto/create-circulation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/circulation/dto/search-circulation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/circulation/dto/update-circulation-routing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/circulation/entities/circulation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "target": "file:modules/circulation/entities/circulation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation.entity.ts",
+ "target": "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation.entity.ts",
+ "target": "file:modules/circulation/entities/circulation-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.controller.ts",
+ "target": "file:modules/dashboard/dashboard.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.module.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.module.ts",
+ "target": "file:modules/dashboard/dashboard.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.module.ts",
+ "target": "file:modules/dashboard/dashboard.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.service.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/dto/create-workflow-definition.dto.ts",
+ "target": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/dto/update-workflow-definition.dto.ts",
+ "target": "file:modules/workflow-engine/dto/create-workflow-definition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "target": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:modules/workflow-engine/dto/create-workflow-definition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:modules/workflow-engine/dto/evaluate-workflow.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:modules/workflow-engine/dto/update-workflow-definition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:modules/workflow-engine/dto/workflow-transition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-history.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/workflow-event.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:modules/workflow-engine/workflow-event.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/dto/create-workflow-definition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/dto/evaluate-workflow.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/dto/update-workflow-definition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/dto/workflow-history-item.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-history.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:modules/workflow-engine/workflow-event.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-event.processor.ts",
+ "target": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-event.service.ts",
+ "target": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/reminder/services/escalation.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/reminder/services/escalation.service.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/reminder/services/escalation.service.ts",
+ "target": "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/reminder/services/scheduler.service.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/reminder/services/scheduler.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/reminder/services/scheduler.service.ts",
+ "target": "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/response-code/dto/create-response-code.dto.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/dto/update-response-code.dto.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/entities/response-code.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/entities/response-code.entity.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": ",",
+ "direction": "forward"
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:modules/response-code/dto/create-response-code.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:modules/response-code/dto/update-response-code.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:modules/response-code/dto/upsert-response-code-rule.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/notification/notification.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/response-code.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/response-code/services/notification-trigger.service.ts",
+ "target": "file:modules/response-code/services/implications.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/response-code/services/notification-trigger.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/review-team/entities/review-task.entity.ts",
+ "target": "file:modules/review-team/entities/review-team.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/review-team/entities/review-task.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "target": "file:modules/review-team/entities/review-team.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/entities/review-team.entity.ts",
+ "target": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/review-team/review-task.service.ts",
+ "target": "file:modules/response-code/services/audit.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/review-team/review-task.service.ts",
+ "target": "file:modules/review-team/dto/shared/review-team.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/review-team/review-task.service.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/entities/review-team.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/review-task.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/review-team.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/services/aggregate-status.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/services/consensus.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/services/task-creation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/services/veto-override.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/review-team.service.ts",
+ "target": "file:modules/review-team/dto/shared/review-team.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/review-team/review-team.service.ts",
+ "target": "file:modules/review-team/entities/review-team.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/review-team/review-team.service.ts",
+ "target": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/review-team/review-team.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/review-team/services/aggregate-status.service.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/review-team/services/consensus.service.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/review-team/services/consensus.service.ts",
+ "target": "file:modules/review-team/services/aggregate-status.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/review-team/services/task-creation.service.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/review-team/services/task-creation.service.ts",
+ "target": "file:modules/review-team/entities/review-team.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/review-team/services/task-creation.service.ts",
+ "target": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/review-team/services/veto-override.service.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/user/entities/role.entity.ts",
+ "target": "file:modules/user/entities/permission.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/user/entities/user-assignment.entity.ts",
+ "target": "file:modules/user/entities/role.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/user/entities/user-assignment.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/file-storage/entities/attachment.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/file-storage/file-cleanup.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/file-storage/file-storage.module.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/file-storage/file-storage.module.ts",
+ "target": "file:common/file-storage/file-cleanup.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:common/file-storage/file-storage.module.ts",
+ "target": "file:common/file-storage/file-storage.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/file-storage/file-storage.module.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:common/file-storage/file-storage.module.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:common/file-storage/file-storage.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/file-storage/file-storage.service.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:database/seeds/run-seed.ts",
+ "target": "file:config/database.config.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:database/seeds/run-seed.ts",
+ "target": "file:database/seeds/organization.seed.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:database/seeds/run-seed.ts",
+ "target": "file:database/seeds/user.seed.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/contract/contract.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/contract/contract.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/contract/contract.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.45
+ },
+ {
+ "source": "file:modules/contract/contract.controller.ts",
+ "target": "file:modules/contract/contract.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/contract/dto/create-contract.dto.ts",
+ "target": "file:modules/contract/contract.controller.ts",
+ "type": "uses",
+ "direction": "backward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/contract/dto/search-contract.dto.ts",
+ "target": "file:modules/contract/contract.controller.ts",
+ "type": "uses",
+ "direction": "backward",
+ "weight": 0.45
+ },
+ {
+ "source": "file:modules/contract/dto/update-contract.dto.ts",
+ "target": "file:modules/contract/contract.controller.ts",
+ "type": "uses",
+ "direction": "backward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/contract/contract.module.ts",
+ "target": "file:modules/contract/contract.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/contract/entities/contract.entity.ts",
+ "target": "file:modules/contract/contract.module.ts",
+ "type": "exports",
+ "direction": "backward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/contract/entities/contract-organization.entity.ts",
+ "target": "file:modules/contract/contract.module.ts",
+ "type": "exports",
+ "direction": "backward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/contract/contract.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/contract/contract.service.ts",
+ "target": "file:modules/contract/dto/create-contract.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/contract/contract.service.ts",
+ "target": "file:modules/contract/dto/update-contract.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/contract/contract.service.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/contract/dto/update-contract.dto.ts",
+ "target": "file:modules/contract/dto/create-contract.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/contract/entities/contract-organization.entity.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/contract/entities/contract.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:modules/drawing/dto/create-asbuilt-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:modules/drawing/dto/create-asbuilt-drawing-revision.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:modules/drawing/dto/search-asbuilt-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:modules/drawing/drawing-master-data.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "type": "references",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-category.entity.ts",
+ "type": "references",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "type": "references",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "type": "references",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "type": "references",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "type": "references",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/contract-drawing.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/drawing-master-data.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/drawing-master-data.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.58
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.62
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.57
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.61
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.58
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.59
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.61
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.58
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.72
+ },
+ {
+ "source": "file:modules/drawing/dto/update-contract-drawing.dto.ts",
+ "target": "file:modules/drawing/dto/create-contract-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing-category.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.58
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.62
+ },
+ {
+ "source": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.57
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "target": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "target": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:modules/drawing/dto/create-shop-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:modules/drawing/dto/create-shop-drawing-revision.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:modules/drawing/dto/search-shop-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/project/entities/project-organization.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/project/entities/project-organization.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/project/entities/project.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/project/entities/project.entity.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/project/project.module.ts",
+ "target": "file:modules/organization/organization.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/project/project.module.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/project/project.module.ts",
+ "target": "file:modules/project/entities/project-organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/project/project.module.ts",
+ "target": "file:modules/project/project.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/project/project.module.ts",
+ "target": "file:modules/project/project.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/project/project.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:scripts/migrate-storage-v2.ts",
+ "target": "file:config/database.config.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/dto/create-notification.dto.ts",
+ "target": "file:modules/notification/entities/notification.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/entities/notification.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/notification-cleanup.service.ts",
+ "target": "file:modules/notification/entities/notification.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/entities/notification.entity.ts",
+ "target": "file:modules/notification/notification-cleanup.service.ts",
+ "type": "uses",
+ "direction": "backward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/notification/notification.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/notification.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/notification/notification.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/notification/notification.controller.ts",
+ "target": "file:modules/notification/dto/search-notification.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/notification/notification.controller.ts",
+ "target": "file:modules/notification/entities/notification.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/notification/notification.controller.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.95
+ },
+ {
+ "source": "file:modules/notification/notification.gateway.ts",
+ "target": "file:modules/notification/entities/notification.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/notification/entities/notification.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/notification/notification-cleanup.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/notification/notification.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/notification/notification.gateway.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/notification/notification.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/notification/notification.service.ts",
+ "target": "file:modules/notification/dto/search-notification.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/notification/notification.service.ts",
+ "target": "file:modules/notification/entities/notification.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/notification/notification.service.ts",
+ "target": "file:modules/notification/notification.gateway.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/user/dto/update-user.dto.ts",
+ "target": "file:modules/user/dto/create-user.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/entities/user-preference.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user-assignment.service.ts",
+ "target": "file:modules/user/dto/assign-role.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/user/user-assignment.service.ts",
+ "target": "file:modules/user/dto/bulk-assignment.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/user/user-assignment.service.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/user/user-assignment.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/user/user-preference.service.ts",
+ "target": "file:modules/user/dto/update-preference.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user-preference.service.ts",
+ "target": "file:modules/user/entities/user-preference.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/dto/assign-role.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/dto/bulk-assignment.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/dto/create-user.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/dto/search-user.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/dto/update-preference.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/dto/update-user.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/user-assignment.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/user-preference.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/entities/permission.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/entities/role.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/entities/user-preference.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/user-preference.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/user-assignment.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/user/user.module.ts",
+ "target": "file:modules/user/user.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/user/user.service.ts",
+ "target": "file:modules/user/dto/create-user.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/user/user.service.ts",
+ "target": "file:modules/user/dto/search-user.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/user/user.service.ts",
+ "target": "file:modules/user/dto/update-user.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/user/user.service.ts",
+ "target": "file:modules/user/entities/permission.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/user/user.service.ts",
+ "target": "file:modules/user/entities/role.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/user/user.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.92
+ },
+ {
+ "source": "file:database/seeds/ai-intent.seed.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:modules/ai/intent-classifier/dto/create-intent-definition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:modules/ai/intent-classifier/dto/create-intent-pattern.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:modules/ai/intent-classifier/dto/update-intent-definition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:modules/ai/intent-classifier/dto/update-intent-pattern.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-classify.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-classify.controller.ts",
+ "target": "file:modules/ai/intent-classifier/dto/classify-query.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/classification-audit.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-analytics.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-definition.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-pattern-cache.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/llm-semaphore.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/ollama-client.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/services/pattern-matcher.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/classification-audit.service.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/classification-result.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/classification-result.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "target": "file:modules/ai/intent-classifier/services/classification-audit.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-pattern-cache.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "target": "file:modules/ai/intent-classifier/services/llm-semaphore.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "target": "file:modules/ai/intent-classifier/services/ollama-client.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "target": "file:modules/ai/intent-classifier/services/pattern-matcher.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-definition.service.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-definition.service.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-pattern-cache.service.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-pattern-cache.service.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/classification-result.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "target": "file:modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-pattern-cache.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/pattern-matcher.service.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/classification-result.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/numbering-metrics.controller.ts",
+ "target": "file:modules/document-numbering/services/metrics.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-sub-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/controllers/document-numbering.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/controllers/numbering-metrics.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/entities/document-number-audit.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/entities/document-number-counter.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/entities/document-number-error.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/entities/document-number-format.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/entities/document-number-reservation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/audit.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/counter.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/document-numbering-lock.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/format.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/manual-override.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/metrics.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/reservation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/document-numbering/services/template.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/document-numbering.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/dto/manual-override.dto.ts",
+ "target": "file:modules/document-numbering/dto/counter-key.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/entities/document-number-format.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/entities/document-number-format.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/audit.service.ts",
+ "target": "file:modules/document-numbering/entities/document-number-audit.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/counter.service.ts",
+ "target": "file:modules/document-numbering/dto/counter-key.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/dto/confirm-reservation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/dto/counter-key.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.58
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/dto/manual-override.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.57
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/dto/reserve-number.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.56
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/entities/document-number-audit.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.54
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/entities/document-number-error.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.53
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/entities/document-number-format.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.52
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/interfaces/document-numbering.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.49
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/services/counter.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/services/document-numbering-lock.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.72
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/services/format.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.68
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/services/manual-override.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.71
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/services/metrics.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.63
+ },
+ {
+ "source": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "target": "file:modules/document-numbering/services/reservation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.74
+ },
+ {
+ "source": "file:modules/document-numbering/services/format.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/format.service.ts",
+ "target": "file:modules/document-numbering/entities/document-number-format.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/document-numbering/services/format.service.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/document-numbering/services/format.service.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/format.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/document-numbering/services/manual-override.service.ts",
+ "target": "file:modules/document-numbering/dto/manual-override.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/manual-override.service.ts",
+ "target": "file:modules/document-numbering/services/audit.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/document-numbering/services/manual-override.service.ts",
+ "target": "file:modules/document-numbering/services/counter.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/reservation.service.ts",
+ "target": "file:modules/document-numbering/dto/confirm-reservation.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/reservation.service.ts",
+ "target": "file:modules/document-numbering/dto/counter-key.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/document-numbering/services/reservation.service.ts",
+ "target": "file:modules/document-numbering/dto/reserve-number.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/reservation.service.ts",
+ "target": "file:modules/document-numbering/entities/document-number-reservation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/document-numbering/services/reservation.service.ts",
+ "target": "file:modules/document-numbering/services/counter.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/document-numbering/services/reservation.service.ts",
+ "target": "file:modules/document-numbering/services/format.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/document-numbering/services/template.service.ts",
+ "target": "file:modules/document-numbering/entities/document-number-format.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/auth/casl/casl.module.ts",
+ "target": "file:common/auth/casl/ability.factory.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/common.module.ts",
+ "target": "file:common/filters/global-exception.filter.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/common.module.ts",
+ "target": "file:common/interceptors/transform.interceptor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:common/common.module.ts",
+ "target": "file:common/services/crypto.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/common.module.ts",
+ "target": "file:common/services/request-context.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:common/common.module.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/filters/global-exception.filter.ts",
+ "target": "file:common/exceptions/base.exception.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:common/filters/global-exception.filter.ts",
+ "target": "file:common/interfaces/request-with-user.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "target": "file:modules/ai/tool/drawing-tool.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "target": "file:modules/ai/tool/rfa-tool.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:common/auth/casl/casl.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:common/common.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:modules/ai/tool/drawing-tool.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:modules/ai/tool/rfa-tool.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/tool/drawing-tool.service.ts",
+ "target": "file:common/auth/casl/ability.factory.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/tool/drawing-tool.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/tool/rfa-tool.service.ts",
+ "target": "file:common/auth/casl/ability.factory.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/tool/rfa-tool.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "target": "file:modules/ai/tool/types/tool-call-result.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "target": "file:modules/ai/tool/types/tool-handler-context.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "target": "file:modules/ai/tool/types/transmittal-tool-result.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "target": "file:modules/transmittal/transmittal.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/ai/tool/types/tool-handler-context.type.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/dto/update-json-schema.dto.ts",
+ "target": "file:modules/json-schema/dto/create-json-schema.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:modules/json-schema/dto/create-json-schema.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:modules/json-schema/dto/migrate-data.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:modules/json-schema/dto/search-json-schema.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:modules/json-schema/dto/update-json-schema.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.75
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:modules/json-schema/json-schema.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:modules/json-schema/services/schema-migration.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.85
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:common/services/crypto.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:modules/json-schema/entities/json-schema.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:modules/json-schema/json-schema.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:modules/json-schema/json-schema.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:modules/json-schema/services/json-security.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:modules/json-schema/services/schema-migration.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.6
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:modules/json-schema/services/ui-schema.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.5
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:modules/json-schema/services/virtual-column.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.4
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.3
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/dto/create-json-schema.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/dto/search-json-schema.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/dto/update-json-schema.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/entities/json-schema.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/interfaces/ui-schema.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/interfaces/validation-result.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/services/json-security.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/services/ui-schema.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.service.ts",
+ "target": "file:modules/json-schema/services/virtual-column.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/json-schema/services/json-security.service.ts",
+ "target": "file:common/services/crypto.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/services/json-security.service.ts",
+ "target": "file:modules/json-schema/services/json-security.service.ts",
+ "type": "exports",
+ "direction": "backward",
+ "weight": 1
+ },
+ {
+ "source": "file:modules/json-schema/services/schema-migration.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/services/schema-migration.service.ts",
+ "target": "file:modules/json-schema/json-schema.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/json-schema/services/ui-schema.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/json-schema/services/ui-schema.service.ts",
+ "target": "file:modules/json-schema/interfaces/ui-schema.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.65
+ },
+ {
+ "source": "file:modules/json-schema/services/virtual-column.service.ts",
+ "target": "file:modules/json-schema/entities/json-schema.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/dsl/parser.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7
+ },
+ {
+ "source": "file:modules/workflow-engine/dsl/parser.service.ts",
+ "target": "file:modules/workflow-engine/dsl/workflow-dsl.schema.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.8
+ },
+ {
+ "source": "file:modules/workflow-engine/dsl/parser.service.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.9
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:common/common.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:common/file-storage/file-storage.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:common/interceptors/audit-log.interceptor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/ai/ai.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/audit-log/audit-log.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/circulation/circulation.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/contract/contract.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/correspondence/correspondence.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/dashboard/dashboard.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/delegation/delegation.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/distribution/distribution.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/document-numbering/document-numbering.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/drawing/drawing.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/json-schema/json-schema.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/master/master.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/migration/migration.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/monitoring/monitoring.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/notification/notification.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/organization/organization.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/project/project.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/reminder/reminder.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/response-code/response-code.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/review-team/review-team.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/rfa/rfa.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/search/search.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/tags/tags.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/transmittal/transmittal.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:app.module.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/auth/casl/ability.factory.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/auth/casl/ability.factory.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/auth/entities/refresh-token.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/auth/guards/permissions.guard.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/auth/strategies/jwt.strategy.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/decorators/current-user.decorator.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/entities/audit-log.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/file-storage/entities/attachment.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/file-storage/entities/attachment.entity.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-history.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/file-storage/file-storage.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/guards/rbac.guard.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/guards/rbac.guard.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/interceptors/audit-log.interceptor.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/interceptors/performance.interceptor.ts",
+ "target": "file:modules/monitoring/services/metrics.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:common/interfaces/request-with-user.interface.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:database/seeds/ai-intent.seed.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:database/seeds/organization.seed.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:database/seeds/user.seed.ts",
+ "target": "file:modules/user/entities/role.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:database/seeds/user.seed.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:database/seeds/user.seed.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:database/seeds/workflow-definitions.seed.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-definition.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:database/seeds/workflow-definitions.seed.ts",
+ "target": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/create-ai-job.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/delete-audit-logs.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/extract-document.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/legacy-migration.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/migration-checkpoint.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/migration-query.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/migration-update.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/dto/ocr-engine-response.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/entities/migration-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/entities/ocr-engine-configuration.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/guards/ai-enabled.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/guards/service-account.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/services/ai-policy.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/services/ocr.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/services/sandbox-ocr-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:modules/ai/ai-queue.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:modules/ai/dto/legacy-migration.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:modules/ai/entities/migration-review.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:modules/migration/migration.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-ingest.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-migration-checkpoint.service.ts",
+ "target": "file:modules/ai/dto/migration-checkpoint.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-migration-checkpoint.service.ts",
+ "target": "file:modules/ai/entities/migration-progress.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-migration-checkpoint.service.ts",
+ "target": "file:modules/ai/entities/migration-review.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:common/file-storage/file-storage.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/entities/ai-available-model.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/entities/ai-execution-profile.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/entities/ai-sandbox-profile.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/entities/migration-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/entities/migration-progress.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/entities/migration-review.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/entities/system-setting.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/guards/ai-enabled.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/processors/ai-batch.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/processors/ai-realtime.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/processors/rag.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/processors/typhoon-llm.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/processors/vector-deletion.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/qdrant.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/services/ai-policy.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/services/embedding.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/services/ocr-cache.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/services/ocr.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/services/ollama.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/services/sandbox-ocr-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/services/vram-monitor.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/tool/ai-tool.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/ai/workers/cleanup-temp-files.worker.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/audit-log/audit-log.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/migration/entities/import-transaction.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/migration/migration.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/tags/tags.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-queue.service.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-rag.service.ts",
+ "target": "file:modules/ai/qdrant.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-rag.service.ts",
+ "target": "file:modules/ai/services/ocr.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/create-ai-job.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/extract-document.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/migration-query.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/migration-update.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/dto/submit-ai-job.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/entities/ai-available-model.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/entities/ai-model-configuration.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/entities/migration-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/processors/ai-batch.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/processors/ai-realtime.processor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/qdrant.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/services/ai-policy.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/services/ocr.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/services/ollama.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/ai/services/vram-monitor.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/migration/entities/import-transaction.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-settings.service.ts",
+ "target": "file:modules/ai/entities/ai-available-model.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-settings.service.ts",
+ "target": "file:modules/ai/entities/system-setting.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/ai-validation.service.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/dto/add-ai-model.dto.ts",
+ "target": "file:modules/ai/entities/ai-model-configuration.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/dto/ai-callback.dto.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/dto/ai-job-response.dto.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/dto/create-ai-job.dto.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/dto/migration-query.dto.ts",
+ "target": "file:modules/ai/entities/migration-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/dto/migration-update.dto.ts",
+ "target": "file:modules/ai/entities/migration-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/dto/ocr-engine-response.dto.ts",
+ "target": "file:modules/ai/entities/ocr-engine-configuration.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/guards/ai-enabled.guard.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/guards/ai-enabled.guard.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-definition.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/controllers/intent-classify.controller.ts",
+ "target": "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/dto/create-intent-definition.dto.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/dto/create-intent-pattern.dto.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/dto/update-intent-pattern.dto.ts",
+ "target": "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/controllers/intent-analytics.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "target": "file:modules/ai/intent-classifier/controllers/intent-classify.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/intent-classifier/services/classification-audit.service.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/services/ai-policy.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/services/embedding.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/services/ocr.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/services/ollama.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/ai/services/sandbox-ocr-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/migration/entities/migration-error.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/migration/migration.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-batch.processor.ts",
+ "target": "file:modules/tags/tags.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-realtime.processor.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-realtime.processor.ts",
+ "target": "file:modules/ai/services/ocr.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-realtime.processor.ts",
+ "target": "file:modules/ai/services/ollama.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/ai-realtime.processor.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/rag.processor.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/typhoon-llm.processor.ts",
+ "target": "file:modules/ai/services/vram-monitor.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "target": "file:modules/ai/services/ocr-cache.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "target": "file:modules/ai/services/sandbox-ocr-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "target": "file:modules/ai/services/vram-monitor.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/processors/vector-deletion.processor.ts",
+ "target": "file:modules/ai/ai-queue.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.module.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/prompts/ai-prompts.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ai-policy.service.ts",
+ "target": "file:modules/ai/entities/ai-execution-profile.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ai-policy.service.ts",
+ "target": "file:modules/ai/entities/ai-sandbox-profile.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ai-policy.service.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/migration.service.ts",
+ "target": "file:modules/ai/dto/migration-queue-item.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/migration.service.ts",
+ "target": "file:modules/ai/entities/migration-review.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/dto/ocr-engine-response.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/entities/ocr-engine-configuration.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/entities/system-setting.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/ocr.service.ts",
+ "target": "file:modules/ai/interfaces/ocr-residency.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/services/vram-monitor.service.ts",
+ "target": "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:modules/drawing/drawing.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:modules/rfa/rfa.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool.module.ts",
+ "target": "file:modules/transmittal/transmittal.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "target": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "target": "file:modules/ai/tool/types/server-intent.enum.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "target": "file:modules/ai/tool/types/tool-call-result.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "target": "file:modules/ai/tool/types/tool-handler-context.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/drawing-tool.service.ts",
+ "target": "file:modules/ai/tool/types/drawing-tool-result.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/drawing-tool.service.ts",
+ "target": "file:modules/ai/tool/types/tool-call-result.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/drawing-tool.service.ts",
+ "target": "file:modules/ai/tool/types/tool-handler-context.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/drawing-tool.service.ts",
+ "target": "file:modules/drawing/shop-drawing.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/rfa-tool.service.ts",
+ "target": "file:modules/ai/tool/types/rfa-tool-result.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/rfa-tool.service.ts",
+ "target": "file:modules/ai/tool/types/tool-call-result.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/rfa-tool.service.ts",
+ "target": "file:modules/ai/tool/types/tool-handler-context.type.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/rfa-tool.service.ts",
+ "target": "file:modules/rfa/rfa.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "target": "file:common/auth/casl/ability.factory.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/tool/transmittal-tool.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/ai/workers/cleanup-temp-files.worker.ts",
+ "target": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.module.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/audit-log/audit-log.service.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/document-numbering/document-numbering.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.module.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation.service.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation-workflow.service.ts",
+ "target": "file:modules/workflow-engine/dto/workflow-transition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/circulation-workflow.service.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/contract.controller.ts",
+ "target": "file:modules/contract/dto/create-contract.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/contract.controller.ts",
+ "target": "file:modules/contract/dto/search-contract.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/contract.controller.ts",
+ "target": "file:modules/contract/dto/update-contract.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/contract.module.ts",
+ "target": "file:modules/contract/contract.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/contract.module.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/contract.module.ts",
+ "target": "file:modules/contract/entities/contract-organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/contract.module.ts",
+ "target": "file:modules/project/project.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/entities/contract.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/contract/entities/contract-organization.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:common/interfaces/request-with-user.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:common/file-storage/file-storage.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/ai/ai.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/circulation/circulation.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/correspondence/correspondence.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/document-numbering/document-numbering.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/json-schema/json-schema.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/notification/notification.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/search/search.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.module.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/circulation/circulation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/circulation/entities/circulation.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/dto/add-reference.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/dto/create-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/dto/search-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/correspondence/dto/update-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/json-schema/json-schema.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/master/entities/tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/search/search.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence.service.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/workflow-engine/dto/workflow-transition.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/correspondence-workflow.service.ts",
+ "target": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/dto/update-correspondence.dto.ts",
+ "target": "file:modules/correspondence/dto/create-correspondence.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/dto/workflow-action.dto.ts",
+ "target": "file:modules/workflow-engine/interfaces/workflow.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/due-date-reminder.service.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/due-date-reminder.service.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-routing.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-routing.entity.ts",
+ "target": "file:modules/correspondence/entities/routing-template.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-routing.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-routing.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-sub-type.entity.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/correspondence/entities/correspondence-tag.entity.ts",
+ "target": "file:modules/master/entities/tag.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.controller.ts",
+ "target": "file:modules/dashboard/dto/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.module.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.module.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.module.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.service.ts",
+ "target": "file:modules/dashboard/dto/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.service.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/dashboard/dashboard.service.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/delegation/delegation.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/delegation/delegation.module.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/delegation/delegation.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/delegation/delegation.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/delegation/entities/delegation.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution-matrix.service.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution-matrix.service.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/distribution.service.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/dto/add-distribution-recipient.dto.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/processors/distribution.processor.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/processors/distribution.processor.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/services/approval-listener.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/transmittal/entities/transmittal.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/transmittal/entities/transmittal-item.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/distribution/services/transmittal-creator.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "target": "file:modules/document-numbering/dto/manual-override.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/document-numbering/services/counter.service.ts",
+ "target": "file:modules/document-numbering/entities/document-number-counter.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:modules/project/project.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/asbuilt-drawing.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:modules/project/project.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:modules/drawing/dto/create-contract-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:modules/drawing/dto/search-contract-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:modules/drawing/dto/update-contract-drawing.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/contract-drawing.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing-master-data.service.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:common/file-storage/file-storage.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/contract-drawing.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/shop-drawing.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/drawing/shop-drawing.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/drawing.module.ts",
+ "target": "file:modules/project/project.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:modules/project/project.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/drawing/shop-drawing.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/json-schema/json-schema.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/entities/discipline.entity.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/master/master.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/circulation/entities/circulation-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-sub-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/circulation/entities/circulation-status-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-sub-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/master/master.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/dto/create-migration-error.dto.ts",
+ "target": "file:modules/migration/entities/migration-error.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/dto/migration-queue-query.dto.ts",
+ "target": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:common/auth/casl/casl.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:common/file-storage/file-storage.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/migration/migration-review.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/notification/notification.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.module.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration-review.controller.ts",
+ "target": "file:common/auth/guards/permissions.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration-review.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration-review.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration-review.controller.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration-review.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration-review.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/rfa/entities/rfa.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration-review.service.ts",
+ "target": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:common/file-storage/file-storage.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/rfa/entities/rfa.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/migration.service.ts",
+ "target": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/migration/workers/expire-pending-reviews.worker.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.controller.ts",
+ "target": "file:modules/monitoring/monitoring.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.module.ts",
+ "target": "file:common/interceptors/performance.interceptor.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.module.ts",
+ "target": "file:modules/monitoring/controllers/health.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.module.ts",
+ "target": "file:modules/monitoring/monitoring.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/monitoring/monitoring.service.ts",
+ "target": "file:modules/monitoring/dto/set-maintenance.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/notification/entities/notification.entity.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/notification/notification.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/user/entities/user-preference.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/notification/notification.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/notification/notification.processor.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/notification/notification.processor.ts",
+ "target": "file:modules/user/user.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/notification/notification.service.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/organization/entities/organization.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/organization/entities/organization.entity.ts",
+ "target": "file:modules/organization/entities/organization-role.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/organization/entities/organization-role.entity.ts",
+ "target": "file:common/entities/base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/organization/organization.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/organization/organization.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/organization/organization.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/dto/update-project.dto.ts",
+ "target": "file:modules/project/dto/create-project.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.controller.ts",
+ "target": "file:modules/project/dto/create-project.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.controller.ts",
+ "target": "file:modules/project/dto/search-project.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.service.ts",
+ "target": "file:modules/organization/organization.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.service.ts",
+ "target": "file:modules/project/dto/create-project.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/project/project.service.ts",
+ "target": "file:modules/project/dto/search-project.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/processors/reminder.processor.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/processors/reminder.processor.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/processors/reminder.processor.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/reminder.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/notification/notification.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/user/entities/role.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/reminder.module.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/services/escalation.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/services/escalation.service.ts",
+ "target": "file:modules/review-team/entities/review-task.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/reminder/services/escalation.service.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/entities/response-code.entity.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/entities/response-code.entity.ts",
+ "target": "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:modules/response-code/response-code.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:modules/response-code/services/inheritance.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.controller.ts",
+ "target": "file:modules/response-code/services/matrix-management.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/response-code.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/services/audit.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/services/implications.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/services/inheritance.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/services/matrix-management.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/response-code/services/notification-trigger.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.module.ts",
+ "target": "file:modules/user/user.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.service.ts",
+ "target": "file:modules/response-code/dto/create-response-code.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.service.ts",
+ "target": "file:modules/response-code/dto/update-response-code.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.service.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/response-code.service.ts",
+ "target": "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/seeders/response-code.seed.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/seeders/response-code.seed.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/services/audit.service.ts",
+ "target": "file:common/entities/audit-log.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/services/implications.service.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/services/inheritance.service.ts",
+ "target": "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/services/matrix-management.service.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/services/matrix-management.service.ts",
+ "target": "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/services/notification-trigger.service.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/response-code/services/notification-trigger.service.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/dto/shared/review-team.dto.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-task.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-task.entity.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-task.entity.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-task.entity.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-team.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-team.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/entities/review-team-member.entity.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:common/auth/guards/permissions.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-task.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-task.service.ts",
+ "target": "file:common/validators/review-validators.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-task.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-task.service.ts",
+ "target": "file:modules/response-code/entities/response-code.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.controller.ts",
+ "target": "file:common/auth/guards/permissions.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:common/auth/casl/casl.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/common/constants/queue.constants.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/delegation/delegation.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/distribution/distribution.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/notification/notification.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/reminder/reminder.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/response-code/response-code.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/review-task.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.module.ts",
+ "target": "file:modules/review-team/review-team.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/review-team.service.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/services/aggregate-status.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/services/consensus.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/services/consensus.service.ts",
+ "target": "file:modules/distribution/services/approval-listener.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/services/task-creation.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/services/task-creation.service.ts",
+ "target": "file:modules/delegation/delegation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/services/task-creation.service.ts",
+ "target": "file:modules/reminder/services/scheduler.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/services/veto-override.service.ts",
+ "target": "file:modules/common/enums/review.enums.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/review-team/services/veto-override.service.ts",
+ "target": "file:modules/distribution/services/approval-listener.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-item.entity.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-item.entity.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-item.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-type.entity.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-workflow.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-workflow-template.entity.ts",
+ "target": "file:modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:modules/correspondence/dto/workflow-action.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.controller.ts",
+ "target": "file:modules/user/entities/user.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-routing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/correspondence/entities/routing-template.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/correspondence/entities/routing-template-step.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/document-numbering/document-numbering.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/notification/notification.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/review-team/review-team.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.module.ts",
+ "target": "file:modules/rfa/rfa.controller.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/correspondence/dto/workflow-action.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-routing.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/correspondence/entities/routing-template.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/correspondence/entities/routing-template-step.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/master/entities/discipline.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/notification/notification.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/review-team/services/task-creation.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/dto/create-rfa.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/dto/search-rfa.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/rfa/dto/update-rfa.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa.service.ts",
+ "target": "file:modules/workflow-engine/interfaces/workflow.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/rfa/rfa-workflow.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/search/search.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/search/search.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/search/search.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/tags/entities/tag.entity.ts",
+ "target": "file:common/entities/base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/tags/tags.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/tags/tags.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/tags/tags.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/tags/tags.controller.ts",
+ "target": "file:common/interfaces/request-with-user.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/tags/tags.controller.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/dto/update-transmittal.dto.ts",
+ "target": "file:modules/transmittal/dto/create-transmittal.dto.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:common/decorators/audit.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.module.ts",
+ "target": "file:modules/document-numbering/document-numbering.module.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/transmittal/transmittal.service.ts",
+ "target": "file:modules/document-numbering/services/document-numbering.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/entities/role.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/entities/user-assignment.entity.ts",
+ "target": "file:modules/contract/entities/contract.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/entities/user-assignment.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/entities/user-assignment.entity.ts",
+ "target": "file:modules/project/entities/project.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/entities/user.entity.ts",
+ "target": "file:common/entities/uuid-base.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/entities/user.entity.ts",
+ "target": "file:modules/organization/entities/organization.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/entities/user.entity.ts",
+ "target": "file:modules/user/entities/user-assignment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/entities/user.entity.ts",
+ "target": "file:modules/user/entities/user-preference.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/user-assignment.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:common/decorators/current-user.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/user.controller.ts",
+ "target": "file:common/pipes/parse-uuid.pipe.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/user.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/user/user.service.ts",
+ "target": "file:common/services/uuid-resolver.service.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/entities/workflow-history.entity.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/entities/workflow-history.entity.ts",
+ "target": "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "target": "file:common/interfaces/request-with-user.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:common/decorators/require-permission.decorator.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:common/guards/jwt-auth.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:common/guards/rbac.guard.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "target": "file:common/interfaces/request-with-user.interface.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.module.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:common/exceptions/index.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:modules/workflow-engine/workflow-engine.service.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ },
+ {
+ "source": "file:scripts/migrate-storage-v2.ts",
+ "target": "file:common/file-storage/entities/attachment.entity.ts",
+ "type": "imports",
+ "direction": "forward",
+ "weight": 0.7,
+ "recoveredFromImportMap": true
+ }
+ ],
+ "layers": [
+ {
+ "id": "layer:app-bootstrap",
+ "name": "App Bootstrap & Module",
+ "description": "จุดเริ่มต้นและการตั้งค่าหลักของ NestJS",
+ "nodeIds": [
+ "file:app.module.ts",
+ "file:main.ts"
+ ]
+ },
+ {
+ "id": "layer:configurations",
+ "name": "Application Configurations",
+ "description": "ไฟล์กำหนดการตั้งค่าระบบ",
+ "nodeIds": [
+ "file:config/database.config.ts",
+ "file:config/bullmq.config.ts",
+ "file:config/redis.config.ts",
+ "config:modules/ai/workflows/folder-watcher.json",
+ "config:.understand-anything/meta.json"
+ ]
+ },
+ {
+ "id": "layer:common-core",
+ "name": "Common Core & Guards",
+ "description": "ระบบส่วนกลางและความปลอดภัย",
+ "nodeIds": [
+ "file:common/config/env.validation.ts",
+ "file:common/config/redis.config.ts",
+ "file:common/decorators/bypass-maintenance.decorator.ts",
+ "file:common/entities/base.entity.ts",
+ "file:common/guards/maintenance-mode.guard.ts",
+ "file:common/interceptors/idempotency.interceptor.ts",
+ "file:common/interceptors/performance.interceptor.ts",
+ "file:common/resilience/resilience.module.ts",
+ "file:common/decorators/require-permission.decorator.ts",
+ "file:common/guards/jwt-auth.guard.ts",
+ "file:common/pipes/parse-uuid.pipe.ts",
+ "file:common/guards/rbac.guard.ts",
+ "file:common/interfaces/request-with-user.interface.ts",
+ "file:common/services/uuid-resolver.service.ts",
+ "file:common/auth/dto/login.dto.ts",
+ "file:common/auth/dto/register.dto.ts",
+ "file:common/auth/entities/refresh-token.entity.ts",
+ "file:common/auth/guards/permissions.guard.ts",
+ "file:common/auth/casl/ability.factory.ts",
+ "file:common/auth/strategies/jwt-refresh.strategy.ts",
+ "file:common/auth/strategies/jwt.strategy.ts",
+ "file:common/decorators/audit.decorator.ts",
+ "file:common/decorators/current-user.decorator.ts",
+ "file:common/file-storage/file-storage.controller.ts",
+ "file:common/file-storage/file-storage.service.ts",
+ "file:common/interceptors/audit-log.interceptor.ts",
+ "file:common/entities/audit-log.entity.ts",
+ "file:common/exceptions/index.ts",
+ "file:common/entities/uuid-base.entity.ts",
+ "file:common/file-storage/entities/attachment.entity.ts",
+ "file:common/validators/review-validators.ts",
+ "file:common/auth/casl/casl.module.ts",
+ "file:common/file-storage/file-cleanup.service.ts",
+ "file:common/file-storage/file-storage.module.ts",
+ "file:common/common.module.ts",
+ "file:common/filters/global-exception.filter.ts",
+ "file:common/interceptors/transform.interceptor.ts",
+ "file:common/services/crypto.service.ts",
+ "file:common/services/request-context.service.ts",
+ "file:common/exceptions/base.exception.ts",
+ "file:common/decorators/idempotency.decorator.ts",
+ "file:common/decorators/retry.decorator.ts"
+ ]
+ },
+ {
+ "id": "layer:database-migrations-seeds",
+ "name": "Database Migrations & Seeds",
+ "description": "การจัดการข้อมูลและฐานข้อมูล",
+ "nodeIds": [
+ "file:database/seeds/user.seed.ts",
+ "file:database/seeds/workflow-definitions.seed.ts",
+ "file:database/seeds/organization.seed.ts",
+ "file:database/seeds/run-seed.ts",
+ "file:database/seeds/ai-intent.seed.ts",
+ "file:database/migrations/1701676800000-v1-5-1-schema-update.ts",
+ "file:database/migrations/initial-schema.ts"
+ ]
+ },
+ {
+ "id": "layer:ai-intelligence",
+ "name": "AI Intelligent Services",
+ "description": "ปัญญาประดิษฐ์และประมวลผล OCR",
+ "nodeIds": [
+ "file:modules/ai/intent-classifier/controllers/intent-analytics.controller.ts",
+ "file:modules/ai/intent-classifier/services/intent-analytics.service.ts",
+ "file:modules/ai/prompts/ai-prompts.controller.ts",
+ "file:modules/ai/prompts/ai-prompts.entity.ts",
+ "file:modules/ai/prompts/ai-prompts.service.ts",
+ "file:modules/ai/prompts/dto/create-ai-prompt.dto.ts",
+ "file:modules/ai/prompts/dto/update-prompt-note.dto.ts",
+ "file:modules/ai/prompts/dto/ai-prompt-response.dto.ts",
+ "file:modules/ai/ai-ingest.service.ts",
+ "file:modules/ai/ai-migration-checkpoint.service.ts",
+ "file:modules/ai/ai-queue.service.ts",
+ "file:modules/ai/ai-rag.service.ts",
+ "file:modules/ai/ai-settings.service.ts",
+ "file:modules/ai/ai-validation.service.ts",
+ "file:modules/ai/ai.controller.ts",
+ "file:modules/ai/ai.module.ts",
+ "file:modules/ai/ai.service.ts",
+ "file:modules/ai/dto/activate-ai-model.dto.ts",
+ "file:modules/ai/dto/add-ai-model.dto.ts",
+ "file:modules/ai/dto/ai-admin-settings.dto.ts",
+ "file:modules/ai/dto/ai-callback.dto.ts",
+ "file:modules/ai/dto/ai-intent-request.dto.ts",
+ "file:modules/ai/dto/ai-job-response.dto.ts",
+ "file:modules/ai/dto/ai-rag-query.dto.ts",
+ "file:modules/ai/dto/migration-checkpoint.dto.ts",
+ "file:modules/ai/entities/migration-progress.entity.ts",
+ "file:modules/ai/entities/migration-review.entity.ts",
+ "file:modules/ai/entities/ai-available-model.entity.ts",
+ "file:modules/ai/entities/system-setting.entity.ts",
+ "file:modules/ai/dto/create-ai-job.dto.ts",
+ "file:modules/ai/dto/delete-audit-logs.dto.ts",
+ "file:modules/ai/dto/extract-document.dto.ts",
+ "file:modules/ai/dto/legacy-migration.dto.ts",
+ "file:modules/ai/dto/migration-query.dto.ts",
+ "file:modules/ai/dto/migration-queue-item.dto.ts",
+ "file:modules/ai/dto/migration-update.dto.ts",
+ "file:modules/ai/dto/ocr-engine-response.dto.ts",
+ "file:modules/ai/dto/submit-ai-job.dto.ts",
+ "file:modules/ai/entities/ai-audit-log.entity.ts",
+ "file:modules/ai/entities/ai-execution-profile.entity.ts",
+ "file:modules/ai/entities/ai-model-configuration.entity.ts",
+ "file:modules/ai/entities/ai-sandbox-profile.entity.ts",
+ "file:modules/ai/entities/migration-log.entity.ts",
+ "file:modules/ai/entities/ocr-engine-configuration.entity.ts",
+ "file:modules/ai/guards/ai-enabled.guard.ts",
+ "file:modules/ai/guards/service-account.guard.ts",
+ "file:modules/ai/interfaces/execution-policy.interface.ts",
+ "file:modules/ai/interfaces/ocr-residency.interface.ts",
+ "file:modules/ai/processors/ai-batch.processor.ts",
+ "file:modules/ai/processors/ai-realtime.processor.ts",
+ "file:modules/ai/processors/rag.processor.ts",
+ "file:modules/ai/processors/typhoon-llm.processor.ts",
+ "file:modules/ai/services/ocr.service.ts",
+ "file:modules/ai/services/ollama.service.ts",
+ "file:modules/ai/processors/typhoon-ocr.processor.ts",
+ "file:modules/ai/services/ocr-cache.service.ts",
+ "file:modules/ai/services/sandbox-ocr-engine.service.ts",
+ "file:modules/ai/services/vram-monitor.service.ts",
+ "file:modules/ai/processors/vector-deletion.processor.ts",
+ "file:modules/ai/qdrant.service.ts",
+ "file:modules/ai/prompts/ai-prompts.module.ts",
+ "file:modules/ai/services/ai-policy.service.ts",
+ "file:modules/ai/services/embedding.service.ts",
+ "file:modules/ai/services/migration.service.ts",
+ "file:modules/ai/workers/cleanup-temp-files.worker.ts",
+ "file:modules/ai/intent-classifier/controllers/intent-admin.controller.ts",
+ "file:modules/ai/intent-classifier/dto/create-intent-definition.dto.ts",
+ "file:modules/ai/intent-classifier/dto/create-intent-pattern.dto.ts",
+ "file:modules/ai/intent-classifier/dto/update-intent-definition.dto.ts",
+ "file:modules/ai/intent-classifier/dto/update-intent-pattern.dto.ts",
+ "file:modules/ai/intent-classifier/controllers/intent-classify.controller.ts",
+ "file:modules/ai/intent-classifier/dto/classify-query.dto.ts",
+ "file:modules/ai/intent-classifier/entities/intent-definition.entity.ts",
+ "file:modules/ai/intent-classifier/interfaces/intent-category.enum.ts",
+ "file:modules/ai/intent-classifier/services/intent-definition.service.ts",
+ "file:modules/ai/intent-classifier/services/intent-pattern.service.ts",
+ "file:modules/ai/intent-classifier/services/intent-classifier.service.ts",
+ "file:modules/ai/intent-classifier/entities/intent-pattern.entity.ts",
+ "file:modules/ai/intent-classifier/intent-classifier.module.ts",
+ "file:modules/ai/intent-classifier/services/classification-audit.service.ts",
+ "file:modules/ai/intent-classifier/services/intent-pattern-cache.service.ts",
+ "file:modules/ai/intent-classifier/services/llm-semaphore.service.ts",
+ "file:modules/ai/intent-classifier/services/ollama-client.service.ts",
+ "file:modules/ai/intent-classifier/services/pattern-matcher.service.ts",
+ "file:modules/ai/tool/ai-tool-registry.service.ts",
+ "file:modules/ai/tool/drawing-tool.service.ts",
+ "file:modules/ai/tool/rfa-tool.service.ts",
+ "file:modules/ai/tool/ai-tool.module.ts",
+ "file:modules/ai/tool/transmittal-tool.service.ts",
+ "file:modules/ai/tool/types/server-intent.enum.ts",
+ "file:modules/ai/tool/types/tool-call-result.type.ts",
+ "file:modules/ai/tool/types/tool-handler-context.type.ts",
+ "file:modules/ai/tool/types/drawing-tool-result.type.ts",
+ "file:modules/ai/tool/types/rfa-tool-result.type.ts",
+ "file:modules/ai/tool/types/transmittal-tool-result.type.ts",
+ "file:modules/ai/dto/ai-job-result.dto.ts",
+ "file:modules/ai/dto/apply-profile.dto.ts",
+ "file:modules/ai/dto/apply-result.dto.ts",
+ "file:modules/ai/dto/ocr-engine-selection.dto.ts",
+ "file:modules/ai/entities/migration-review-queue.entity.ts",
+ "file:modules/ai/intent-classifier/index.ts"
+ ]
+ },
+ {
+ "id": "layer:business-modules",
+ "name": "Business Modules Layer",
+ "description": "โมดูลทางธุรกิจของระบบหลังบ้าน",
+ "nodeIds": [
+ "file:app.service.ts",
+ "file:modules/auth/entities/role.entity.ts",
+ "file:modules/monitoring/controllers/health.controller.ts",
+ "file:modules/monitoring/dto/set-maintenance.dto.ts",
+ "file:modules/monitoring/logger/winston.config.ts",
+ "file:modules/monitoring/monitoring.controller.ts",
+ "file:src/app.controller.ts",
+ "file:src/app.service.ts",
+ "file:modules/monitoring/services/metrics.service.ts",
+ "file:modules/monitoring/monitoring.service.ts",
+ "file:modules/monitoring/monitoring.module.ts",
+ "file:modules/organization/dto/create-organization.dto.ts",
+ "file:modules/organization/dto/search-organization.dto.ts",
+ "file:modules/organization/dto/update-organization.dto.ts",
+ "file:modules/organization/entities/organization-role.entity.ts",
+ "file:modules/organization/organization.controller.ts",
+ "file:modules/organization/organization.service.ts",
+ "file:modules/organization/organization.module.ts",
+ "file:modules/organization/entities/organization.entity.ts",
+ "file:modules/iversity/dto/update-organization.dto.ts",
+ "file:modules/tags/dto/create-tag.dto.ts",
+ "file:modules/tags/entities/correspondence-tag.entity.ts",
+ "file:modules/tags/entities/tag.entity.ts",
+ "file:modules/tags/tags.controller.ts",
+ "file:modules/tags/tags.service.ts",
+ "file:modules/tags/tags.module.ts",
+ "file:modules/user/user.module.ts",
+ "file:common/guards/jwt-refresh.guard.ts",
+ "file:modules/audit-log/audit-log.controller.ts",
+ "file:modules/audit-log/audit-log.service.ts",
+ "file:src/common/auth/auth.controller.ts",
+ "file:src/common/auth/auth.service.ts",
+ "file:src/common/auth/dto/login.dto.ts",
+ "file:src/common/auth/dto/register.dto.ts",
+ "file:src/common/guards/jwt-auth.guard.ts",
+ "file:src/common/guards/jwt-refresh.guard.ts",
+ "file:src/common/interfaces/request-with-user.interface.ts",
+ "file:src/common/auth/auth.module.ts",
+ "file:modules/user/entities/user.entity.ts",
+ "file:src/common/auth/session.controller.ts",
+ "file:src/modules/user/entities/user.entity.ts",
+ "file:modules/user/user.service.ts",
+ "file:modules/circulation/circulation.controller.ts",
+ "file:modules/circulation/circulation.service.ts",
+ "file:modules/circulation/dto/create-circulation.dto.ts",
+ "file:modules/circulation/dto/force-close-circulation.dto.ts",
+ "file:modules/circulation/dto/reassign-routing.dto.ts",
+ "file:modules/circulation/dto/search-circulation.dto.ts",
+ "file:modules/circulation/dto/update-circulation-routing.dto.ts",
+ "file:modules/correspondence/correspondence.controller.ts",
+ "file:modules/correspondence/correspondence.service.ts",
+ "file:modules/correspondence/correspondence-workflow.service.ts",
+ "file:modules/correspondence/dto/add-reference.dto.ts",
+ "file:modules/correspondence/dto/bulk-cancel.dto.ts",
+ "file:modules/correspondence/dto/cancel-correspondence.dto.ts",
+ "file:modules/correspondence/dto/create-correspondence.dto.ts",
+ "file:modules/correspondence/dto/search-correspondence.dto.ts",
+ "file:modules/correspondence/dto/submit-correspondence.dto.ts",
+ "file:modules/correspondence/dto/update-correspondence.dto.ts",
+ "file:modules/correspondence/dto/workflow-action.dto.ts",
+ "file:modules/common/constants/queue.constants.ts",
+ "file:modules/audit-log/audit-log.module.ts",
+ "file:modules/response-code/services/audit.service.ts",
+ "file:modules/correspondence/entities/correspondence-recipient.entity.ts",
+ "file:modules/correspondence/entities/correspondence-revision-attachment.entity.ts",
+ "file:modules/correspondence/entities/correspondence-revision.entity.ts",
+ "file:modules/correspondence/entities/correspondence-status.entity.ts",
+ "file:modules/correspondence/correspondence.module.ts",
+ "file:modules/correspondence/due-date-reminder.service.ts",
+ "file:modules/correspondence/entities/cor-respondence.entity.ts",
+ "file:modules/correspondence/entities/correspondence-reference.entity.ts",
+ "file:modules/correspondence/entities/correspondence-routing.entity.ts",
+ "file:modules/correspondence/entities/correspondence-sub-type.entity.ts",
+ "file:modules/correspondence/entities/correspondence-tag.entity.ts",
+ "file:modules/correspondence/entities/correspondence-type.entity.ts",
+ "file:modules/correspondence/entities/routing-template-step.entity.ts",
+ "file:modules/correspondence/entities/routing-template.entity.ts",
+ "file:modules/distribution/services/transmittal-creator.service.ts",
+ "file:modules/common/enums/review.enums.ts",
+ "file:modules/distribution/entities/distribution-matrix.entity.ts",
+ "file:modules/distribution/entities/distribution-recipient.entity.ts",
+ "file:modules/circulation/entities/circulation-status-code.entity.ts",
+ "file:modules/notification/notification.service.ts",
+ "file:modules/project/entities/project.entity.ts",
+ "file:modules/workflow-engine/dto/workflow-transition.dto.ts",
+ "file:modules/workflow-engine/workflow-engine.service.ts",
+ "file:modules/rfa/entities/rfa-revision.entity.ts",
+ "file:modules/master/entities/tag.entity.ts",
+ "file:modules/master/entities/discipline.entity.ts",
+ "file:modules/document-numbering/services/document-numbering.service.ts",
+ "file:modules/transmittal/entities/transmittal.entity.ts",
+ "file:modules/transmittal/entities/transmittal-item.entity.ts",
+ "file:modules/master/dto/create-discipline.dto.ts",
+ "file:modules/master/dto/create-sub-type.dto.ts",
+ "file:modules/master/dto/create-tag.dto.ts",
+ "file:modules/master/dto/save-number-format.dto.ts",
+ "file:modules/master/dto/search-tag.dto.ts",
+ "file:modules/master/dto/update-tag.dto.ts",
+ "file:modules/master/master.controller.ts",
+ "file:modules/master/service/master.service.ts",
+ "file:modules/rfa/entities/rfa-type.entity.ts",
+ "file:modules/master/master.module.ts",
+ "file:modules/master/master.service.ts",
+ "file:modules/rfa/entities/rfa-approve-code.entity.ts",
+ "file:modules/rfa/entities/rfa-status-code.entity.ts",
+ "file:modules/migration/dto/commit-batch.dto.ts",
+ "file:modules/migration/dto/import-correspondence.dto.ts",
+ "file:modules/migration/dto/create-migration-error.dto.ts",
+ "file:modules/migration/dto/enqueue-migration.dto.ts",
+ "file:modules/delegation/delegation.controller.ts",
+ "file:modules/delegation/delegation.service.ts",
+ "file:modules/delegation/dto/create-delegation.dto.ts",
+ "file:modules/document-numbering/controllers/document-numbering-admin.controller.ts",
+ "file:modules/document-numbering/controllers/document-numbering.controller.ts",
+ "file:modules/document-numbering/dto/preview-number.dto.ts",
+ "file:modules/document-numbering/dto/manual-override.dto.ts",
+ "file:modules/drawing/asbuilt-drawing.controller.ts",
+ "file:modules/drawing/asbuilt-drawing.service.ts",
+ "file:modules/drawing/dto/create-asbuilt-drawing.dto.ts",
+ "file:modules/drawing/dto/create-asbuilt-drawing-revision.dto.ts",
+ "file:modules/drawing/dto/search-asbuilt-drawing.dto.ts",
+ "file:modules/drawing/contract-drawing.controller.ts",
+ "file:modules/drawing/contract-drawing.service.ts",
+ "file:modules/drawing/dto/create-contract-drawing.dto.ts",
+ "file:modules/drawing/dto/search-contract-drawing.dto.ts",
+ "file:modules/drawing/dto/update-contract-drawing.dto.ts",
+ "file:modules/drawing/shop-drawing.controller.ts",
+ "file:modules/drawing/dto/create-shop-drawing.dto.ts",
+ "file:modules/drawing/dto/create-shop-drawing-revision.dto.ts",
+ "file:modules/drawing/dto/search-shop-drawing.dto.ts",
+ "file:modules/drawing/shop-drawing.service.ts",
+ "file:modules/migration/dto/commit-migration-review.dto.ts",
+ "file:modules/migration/migration-review.controller.ts",
+ "file:modules/migration/migration-review.service.ts",
+ "file:modules/project/dto/create-project.dto.ts",
+ "file:modules/project/dto/search-project.dto.ts",
+ "file:modules/project/project.service.ts",
+ "file:modules/project/dto/update-project.dto.ts",
+ "file:modules/project/project.controller.ts",
+ "file:modules/review-team/review-task.controller.ts",
+ "file:modules/review-team/dto/shared/review-team.dto.ts",
+ "file:modules/review-team/review-task.service.ts",
+ "file:modules/review-team/services/consensus.service.ts",
+ "file:modules/review-team/services/veto-override.service.ts",
+ "file:modules/review-team/review-team.controller.ts",
+ "file:modules/review-team/review-team.service.ts",
+ "file:modules/rfa/dto/create-rfa-revision.dto.ts",
+ "file:modules/rfa/dto/create-rfa.dto.ts",
+ "file:modules/rfa/dto/search-rfa.dto.ts",
+ "file:modules/rfa/dto/submit-rfa.dto.ts",
+ "file:modules/rfa/dto/update-rfa.dto.ts",
+ "file:modules/rfa/rfa.controller.ts",
+ "file:modules/rfa/rfa.service.ts",
+ "file:modules/transmittal/dto/create-transmittal.dto.ts",
+ "file:modules/transmittal/dto/search-transmittal.dto.ts",
+ "file:modules/transmittal/dto/update-transmittal.dto.ts",
+ "file:modules/transmittal/transmittal.controller.ts",
+ "file:modules/transmittal/transmittal.service.ts",
+ "file:modules/workflow-engine/interfaces/workflow.interface.ts",
+ "file:modules/migration/dto/migration-queue-query.dto.ts",
+ "file:modules/migration/entities/migration-review-",
+ "file:modules/migration/entities/import-transaction.entity.ts",
+ "file:modules/migration/entities/migration-error.entity.ts",
+ "file:modules/migration/entities/migration-review-queue.entity.ts",
+ "file:modules/migration/migration.controller.ts",
+ "file:modules/migration/migration.service.ts",
+ "file:modules/migration/migration.module.ts",
+ "file:modules/migration/workers/expire-pending-reviews.worker.ts",
+ "file:modules/correspondence/entities/correspond-revision.entity.ts",
+ "file:modules/document-numbering/document-numbering.module.ts",
+ "file:modules/rfa/entities/rfa.entity.ts",
+ "file:modules/rfa/entities/rfa-item.entity.ts",
+ "file:modules/rfa/entities/rfa-workflow.entity.ts",
+ "file:modules/rfa/entities/rfa-workflow-template-step.entity.ts",
+ "file:modules/rfa/entities/rfa-workflow-template.entity.ts",
+ "file:modules/user/entities/role.entity.ts",
+ "file:modules/rfa/rfa-workflow.service.ts",
+ "file:modules/rfa/rfa.module.ts",
+ "file:modules/search/dto/search-query.dto.ts",
+ "file:modules/search/search.controller.ts",
+ "file:modules/search/search.service.ts",
+ "file:modules/search/search.module.ts",
+ "file:modules/transmittal/transmittal.module.ts",
+ "file:modules/project/project.module.ts",
+ "file:modules/workflow-engine/workflow-engine.module.ts",
+ "file:modules/delegation/delegation.module.ts",
+ "file:modules/delegation/entities/delegation.entity.ts",
+ "file:modules/delegation/services/circular-detection.service.ts",
+ "file:modules/distribution/distribution-matrix.service.ts",
+ "file:modules/distribution/dto/add-distribution-recipient.dto.ts",
+ "file:modules/distribution/dto/create-distribution-matrix.dto.ts",
+ "file:modules/distribution/dto/update-distribution-matrix.dto.ts",
+ "file:modules/distribution/distribution.controller.ts",
+ "file:modules/distribution/distribution.module.ts",
+ "file:modules/distribution/distribution.service.ts",
+ "file:modules/distribution/processors/distribution.processor.ts",
+ "file:modules/distribution/services/approval-listener.service.ts",
+ "file:modules/notification/notification.module.ts",
+ "file:modules/user/entities/user-assignment.entity.ts",
+ "file:modules/response-code/entities/response-code.entity.ts",
+ "file:modules/review-team/entities/review-task.entity.ts",
+ "file:modules/reminder/entities/reminder-rule.entity.ts",
+ "file:modules/reminder/processors/reminder.processor.ts",
+ "file:modules/reminder/services/escalation.service.ts",
+ "file:modules/reminder/services/scheduler.service.ts",
+ "file:modules/reminder/reminder.controller.ts",
+ "file:modules/reminder/reminder.service.ts",
+ "file:modules/reminder/reminder.module.ts",
+ "file:modules/circulation/circulation-workflow.service.ts",
+ "file:modules/circibility/entities/circulation.entity.ts",
+ "file:modules/circulation/circulation.module.ts",
+ "file:modules/circulation/entities/circulation.entity.ts",
+ "file:modules/circulation/entities/circulation-routing.entity.ts",
+ "file:modules/dashboard/dashboard.controller.ts",
+ "file:modules/dashboard/dashboard.service.ts",
+ "file:modules/dashboard/dashboard.module.ts",
+ "file:modules/workflow-engine/entities/workflow-definition.entity.ts",
+ "file:modules/workflow-engine/workflow-dsl.service.ts",
+ "file:modules/dashboard/dto/index.ts",
+ "file:modules/workflow-engine/entities/workflow-instance.entity.ts",
+ "file:modules/workflow-engine/dto/create-workflow-definition.dto.ts",
+ "file:modules/workflow-engine/dto/evaluate-workflow.dto.ts",
+ "file:modules/workflow-engine/dto/update-workflow-definition.dto.ts",
+ "file:modules/workflow-engine/dto/workflow-history-item.dto.ts",
+ "file:modules/workflow-engine/entities/workflow-history.entity.ts",
+ "file:modules/workflow-engine/guards/workflow-transition.guard.ts",
+ "file:modules/workflow-engine/workflow-engine.controller.ts",
+ "file:modules/workflow-engine/workflow-event.processor.ts",
+ "file:modules/workflow-engine/workflow-event.service.ts",
+ "file:modules/response-code/dto/create-response-code.dto.ts",
+ "file:modules/response-code/dto/update-response-code.dto.ts",
+ "file:modules/response-code/dto/upsert-response-code-rule.dto.ts",
+ "file:modules/response-code/entities/response-code-rule.entity.ts",
+ "file:modules/response-code/response-code.controller.ts",
+ "file:modules/response-code/response-code.module.ts",
+ "file:modules/response-code/response-code.service.ts",
+ "file:modules/response-code/services/inheritance.service.ts",
+ "file:modules/response-code/services/matrix-management.service.ts",
+ "file:modules/response-code/services/implications.service.ts",
+ "file:modules/response-code/services/notification-trigger.service.ts",
+ "file:modules/response-code/seeders/response-code.seed.ts",
+ "file:modules/review-team/entities/review-team-member.entity.ts",
+ "file:modules/review-team/entities/review-team.entity.ts",
+ "file:modules/review-team/review-team.module.ts",
+ "file:modules/review-team/services/aggregate-status.service.ts",
+ "file:modules/review-team/services/task-creation.service.ts",
+ "file:modules/user/entities/permission.entity.ts",
+ "file:modules/contract/contract.controller.ts",
+ "file:modules/contract/contract.service.ts",
+ "file:modules/contract/dto/create-contract.dto.ts",
+ "file:modules/contract/dto/search-contract.dto.ts",
+ "file:modules/contract/dto/update-contract.dto.ts",
+ "file:modules/contract/contract.module.ts",
+ "file:modules/contract/entities/contract-organization.entity.ts",
+ "file:modules/contract/entities/contract.entity.ts",
+ "file:modules/drawing/entities/asbuilt-drawing.entity.ts",
+ "file:modules/drawing/entities/asbuilt-drawing-revision.entity.ts",
+ "file:modules/drawing/entities/shop-drawing-revision.entity.ts",
+ "file:modules/drawing/drawing-master-data.controller.ts",
+ "file:modules/drawing/drawing-master-data.service.ts",
+ "file:modules/drawing/entities/contract-drawing-volume.entity.ts",
+ "file:modules/drawing/entities/contract-drawing-category.entity.ts",
+ "file:modules/drawing/entities/contract-drawing-subcat-cat-map.entity.ts",
+ "file:modules/drawing/entities/contract-drawing-sub-category.entity.ts",
+ "file:modules/drawing/entities/shop-drawing-main-category.entity.ts",
+ "file:modules/drawing/entities/shop-drawing-sub-category.entity.ts",
+ "file:modules/drawing/drawing.module.ts",
+ "file:modules/drawing/entities/contract-drawing.entity.ts",
+ "file:modules/drawing/entities/shop-drawing.entity.ts",
+ "file:modules/project/entities/project-organization.entity.ts",
+ "file:scripts/migrate-storage-v2.ts",
+ "file:modules/notification/dto/create-notification.dto.ts",
+ "file:modules/notification/dto/search-notification.dto.ts",
+ "file:modules/notification/entities/notification.entity.ts",
+ "file:modules/notification/notification-cleanup.service.ts",
+ "file:modules/notification/notification.controller.ts",
+ "file:modules/notification/notification.gateway.ts",
+ "file:modules/notification/notification.processor.ts",
+ "file:modules/user/entities/user-preference.entity.ts",
+ "file:modules/user/dto/assign-role.dto.ts",
+ "file:modules/user/dto/bulk-assignment.dto.ts",
+ "file:modules/user/dto/create-user.dto.ts",
+ "file:modules/user/dto/search-user.dto.ts",
+ "file:modules/user/dto/update-preference.dto.ts",
+ "file:modules/user/dto/update-user.dto.ts",
+ "file:modules/user/user-assignment.service.ts",
+ "file:modules/user/user-preference.service.ts",
+ "file:modules/user/user.controller.ts",
+ "file:modules/document-numbering/controllers/numbering-metrics.controller.ts",
+ "file:modules/document-numbering/services/metrics.service.ts",
+ "file:modules/document-numbering/dto/confirm-reservation.dto.ts",
+ "file:modules/document-numbering/dto/counter-key.dto.ts",
+ "file:modules/document-numbering/dto/reserve-number.dto.ts",
+ "file:modules/document-numbering/entities/document-number-audit.entity.ts",
+ "file:modules/document-numbering/entities/document-number-counter.entity.ts",
+ "file:modules/document-numbering/entities/document-number-error.entity.ts",
+ "file:modules/document-numbering/entities/document-number-reservation.entity.ts",
+ "file:modules/document-numbering/interfaces/document-numbering.interface.ts",
+ "file:modules/document-numbering/services/audit.service.ts",
+ "file:modules/document-numbering/services/counter.service.ts",
+ "file:modules/document-numbering/services/document-numbering-lock.service.ts",
+ "file:modules/document-numbering/services/format.service.ts",
+ "file:modules/document-numbering/services/manual-override.service.ts",
+ "file:modules/document-numbering/services/reservation.service.ts",
+ "file:modules/document-numbering/services/template.service.ts",
+ "file:modules/json-schema/dto/create-json-schema.dto.ts",
+ "file:modules/json-schema/dto/migrate-data.dto.ts",
+ "file:modules/json-schema/dto/search-json-schema.dto.ts",
+ "file:modules/json-schema/dto/update-json-schema.dto.ts",
+ "file:modules/json-schema/entities/json-schema.entity.ts",
+ "file:modules/json-schema/interfaces/ui-schema.interface.ts",
+ "file:modules/json-schema/interfaces/validation-result.interface.ts",
+ "file:modules/json-schema/json-schema.controller.ts",
+ "file:modules/json-schema/json-schema.service.ts",
+ "file:modules/json-schema/services/schema-migration.service.ts",
+ "file:modules/json-schema/json-schema.module.ts",
+ "file:modules/json-schema/services/json-security.service.ts",
+ "file:modules/json-schema/services/ui-schema.service.ts",
+ "file:modules/json-schema/services/virtual-column.service.ts",
+ "file:modules/workflow-engine/dsl/parser.service.ts",
+ "file:modules/workflow-engine/dsl/workflow-dsl.schema.ts",
+ "file:build-map.js",
+ "file:common/decorators/circuit-breaker.decorator.ts",
+ "file:common/exceptions/http-exception.filter.ts",
+ "file:common/utils/uuid-guard.ts",
+ "file:modules/common/constants/bullmq.constants.ts",
+ "file:modules/correspondence/dto/create-routing-template.dto.ts",
+ "file:modules/dashboard/dto/dashboard-stats.dto.ts",
+ "file:modules/dashboard/dto/get-activity.dto.ts",
+ "file:modules/dashboard/dto/get-pending.dto.ts",
+ "file:modules/dashboard/dto/get-stats.dto.ts",
+ "file:modules/rfa/dto/create-rfa-workflow.dto.ts",
+ "file:modules/workflow-engine/dsl/parallel-gateway.handler.ts",
+ "file:modules/workflow-engine/dto/get-available-actions.dto.ts",
+ "file:redlock.d.ts",
+ "file:.understand-anything/.understandignore"
+ ]
+ }
+ ],
+ "tour": [
+ {
+ "order": 1,
+ "title": "จุดเริ่มต้นและการบูสเซิร์ฟเวอร์ (App Entry Point)",
+ "description": "เรียนรู้การบูตสแตรประบบ NestJS",
+ "nodeIds": [
+ "file:main.ts",
+ "file:app.module.ts"
+ ]
+ },
+ {
+ "order": 2,
+ "title": "ระบบรักษาความปลอดภัย (Auth Guards & RBAC)",
+ "description": "ระบบ Guard และสิทธิ์การใช้งานของระบบ",
+ "nodeIds": [
+ "file:common/auth/guards/permissions.guard.ts",
+ "file:common/auth/casl/ability.factory.ts"
+ ]
+ },
+ {
+ "order": 3,
+ "title": "ระบบบันทึกและการจัดการความน่าเชื่อถือ (Audit & Idempotency)",
+ "description": "Interceptor สำหรับ Audit Logs และระบบกันคำขอซ้ำซ้อน",
+ "nodeIds": [
+ "file:common/interceptors/audit-log.interceptor.ts",
+ "file:common/interceptors/idempotency.interceptor.ts"
+ ]
+ },
+ {
+ "order": 4,
+ "title": "ระบบ AI อัจฉริยะ (AI Module)",
+ "description": "โมดูล AI สำหรับ OCR และ Intent Classification",
+ "nodeIds": [
+ "file:modules/ai/ai.service.ts",
+ "file:modules/ai/ai.controller.ts"
+ ]
+ },
+ {
+ "order": 5,
+ "title": "ตัวขับเคลื่อนการอนุมัติ RFA (RFA Workflow)",
+ "description": "ตัวประมวลผลลำดับงานและจัดการสถานะ RFA",
+ "nodeIds": [
+ "file:modules/rfa/rfa.service.ts",
+ "file:modules/rfa/rfa-workflow.service.ts"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/backend/src/.understand-anything/meta.json b/backend/src/.understand-anything/meta.json
new file mode 100644
index 00000000..fc9fa731
--- /dev/null
+++ b/backend/src/.understand-anything/meta.json
@@ -0,0 +1,6 @@
+{
+ "lastAnalyzedAt": "2026-06-13T13:05:10.551Z",
+ "gitCommitHash": "190b9a3af5f505e9ec59ba8d447c4720b2cb7dae",
+ "version": "1.0.0",
+ "analyzedFiles": 487
+}
\ No newline at end of file
diff --git a/backend/src/modules/ai/ai-queue.service.ts b/backend/src/modules/ai/ai-queue.service.ts
index c4805f21..20630d69 100644
--- a/backend/src/modules/ai/ai-queue.service.ts
+++ b/backend/src/modules/ai/ai-queue.service.ts
@@ -126,6 +126,7 @@ export class AiQueueService {
payload: {
idempotencyKey: string;
projectPublicId?: string;
+ contractPublicId?: string;
query?: string;
userPublicId?: string;
filePublicId?: string;
@@ -152,6 +153,7 @@ export class AiQueueService {
pdfPath: payload.pdfPath,
engineType: payload.engineType,
typhoonOptions: payload.typhoonOptions,
+ contractPublicId: payload.contractPublicId,
...payload.extraPayload,
},
idempotencyKey: payload.idempotencyKey,
diff --git a/backend/src/modules/ai/ai-settings.service.spec.ts b/backend/src/modules/ai/ai-settings.service.spec.ts
index 3a7aa6dd..45e160b7 100644
--- a/backend/src/modules/ai/ai-settings.service.spec.ts
+++ b/backend/src/modules/ai/ai-settings.service.spec.ts
@@ -99,15 +99,13 @@ describe('AiSettingsService', () => {
);
});
- it('ควรใช้ typhoon2.5-np-dms:latest (DEFAULT_MODEL) เป็นค่า active model เริ่มต้นเมื่อยังไม่มี system setting (ADR-034)', async () => {
+ it('ควรใช้ np-dms-ai:latest (DEFAULT_MODEL) เป็นค่า active model เริ่มต้นเมื่อยังไม่มี system setting (ADR-036)', async () => {
mockRedis.get.mockResolvedValue(null);
mockSettingRepo.findOne.mockResolvedValue(null);
- await expect(service.getActiveModel()).resolves.toBe(
- 'typhoon2.5-np-dms:latest'
- );
+ await expect(service.getActiveModel()).resolves.toBe('np-dms-ai:latest');
expect(mockRedis.set).toHaveBeenCalledWith(
'system_settings:AI_ACTIVE_MODEL',
- 'typhoon2.5-np-dms:latest',
+ 'np-dms-ai:latest',
'EX',
30
);
diff --git a/backend/src/modules/ai/ai-settings.service.ts b/backend/src/modules/ai/ai-settings.service.ts
index 237dccfe..1c971fda 100644
--- a/backend/src/modules/ai/ai-settings.service.ts
+++ b/backend/src/modules/ai/ai-settings.service.ts
@@ -4,6 +4,7 @@
// - 2026-05-22: เพิ่ม try-catch ใน getAiFeaturesEnabled() เพื่อความยืดหยุ่นในกรณีที่ฐานข้อมูลยังไม่ได้อัปเกรดตาราง system_settings
// - 2026-05-25: เพิ่ม methods สำหรับจัดการรายการโมเดล AI แบบไดนามิก (ADR-027)
// - 2026-06-03: เพิ่ม DEFAULT_MODEL และ OCR_MODEL static constants ตาม ADR-034 (เปลี่ยนจาก gemma4:e4b เป็น typhoon2.5-np-dms)
+// - 2026-06-13: ADR-036 — เปลี่ยน canonical runtime model tags เป็น np-dms-ai/np-dms-ocr
import { Injectable, Logger } from '@nestjs/common';
import { InjectRedis } from '@nestjs-modules/ioredis';
@@ -26,10 +27,10 @@ const AI_ACTIVE_MODEL_TTL_SECONDS = 30;
@Injectable()
export class AiSettingsService {
/** โมเดล AI หลักสำหรับ Extraction, RAG Q&A, AI Suggestion (ADR-034) */
- static readonly DEFAULT_MODEL = 'typhoon2.5-np-dms:latest';
+ static readonly DEFAULT_MODEL = 'np-dms-ai:latest';
/** โมเดล OCR ภาษาไทย — unload หลังใช้งาน (keep_alive=0) (ADR-034) */
- static readonly OCR_MODEL = 'typhoon-np-dms-ocr:latest';
+ static readonly OCR_MODEL = 'np-dms-ocr:latest';
private readonly logger = new Logger(AiSettingsService.name);
constructor(
diff --git a/backend/src/modules/ai/ai.controller.ts b/backend/src/modules/ai/ai.controller.ts
index d9cd4a67..82136ef8 100644
--- a/backend/src/modules/ai/ai.controller.ts
+++ b/backend/src/modules/ai/ai.controller.ts
@@ -11,14 +11,17 @@
// - 2026-05-30: เพิ่ม @UseInterceptors(FileInterceptor('file')) ใน submitSandboxOcr เพื่อแก้ไขปัญหา BadRequestException (File is required)
// - 2026-05-30: เพิ่ม endpoints GET/POST/PATCH models และ GET vram/status สำหรับ dynamic AI model management และ VRAM monitoring (T031-T034, US2)
// - 2026-06-01: [BUGFIX] submitSandboxOcr: เพิ่ม @ApiBearerAuth(), @HttpCode(ACCEPTED), Body({ engineType }) และส่ง engineType ไปยัง enqueueSandboxJob
-// - 2026-06-02: เพิ่ม REST endpoints GET /ai/ocr-engines และ POST /ai/ocr-engines/:engineId/select (T003, T004, ADR-033) และนำเข้า SystemException เพื่อป้องกันความเสียหายในการคอมไพล์
-// - 2026-06-06: [BUGFIX] เพิ่ม @Throttle({ default: { limit: 300, ttl: 60000 } }) บน GET admin/sandbox/job/:id เพื่อแก้ ThrottlerException spam จาก frontend polling
+// - 2026-06-02: เพิ่ม REST endpoints ocr-engines สำหรับ OCR engine management (T003, T004, ADR-033)
+// - 2026-06-06: [BUGFIX] เพิ่ม Throttle บน GET admin/sandbox/job/:id เพื่อแก้ ThrottlerException spam
// - 2026-06-11: แก้ไขการส่งพารามิเตอร์ให้กับ queueSuggestJob ใน suggestDocumentMetadata
+// - 2026-06-13: T024-T026 — เพิ่ม sandbox parameter endpoints (GET/PUT/POST reset) ตาม ADR-036
+// - 2026-06-13: T036, T037, T039, T040, T041 — เพิ่ม endpoints apply sandbox profile และ get production parameters พร้อม idempotency, CASL, validation และ audit
// Controller สำหรับ AI Gateway Endpoints (ADR-023)
import {
Controller,
Post,
+ Put,
Get,
Patch,
Delete,
@@ -78,6 +81,7 @@ import { RbacGuard } from '../../common/guards/rbac.guard';
import { ParseUuidPipe } from '../../common/pipes/parse-uuid.pipe';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import { RequirePermission } from '../../common/decorators/require-permission.decorator';
+import { Audit } from '../../common/decorators/audit.decorator';
import { User } from '../user/entities/user.entity';
import { ServiceAccountGuard } from './guards/service-account.guard';
import { v7 as uuidv7 } from 'uuid';
@@ -100,6 +104,11 @@ import {
import { OcrService } from './services/ocr.service';
import { OcrEngineResponseDto } from './dto/ocr-engine-response.dto';
import { OcrEngineConfiguration } from './entities/ocr-engine-configuration.entity';
+import { AiPolicyService } from './services/ai-policy.service';
+import {
+ RuntimePolicy,
+ ExecutionProfile,
+} from './interfaces/execution-policy.interface';
@ApiTags('AI Gateway')
@Controller('ai')
@@ -113,6 +122,7 @@ export class AiController {
private readonly aiToolRegistryService: AiToolRegistryService,
private readonly fileStorageService: FileStorageService,
private readonly migrationCheckpointService: AiMigrationCheckpointService,
+ private readonly aiPolicyService: AiPolicyService,
@InjectRedis() private readonly redis: Redis,
@Optional() private readonly ocrService?: OcrService
) {}
@@ -489,6 +499,8 @@ export class AiController {
})
)
file: Express.Multer.File,
+ @Body('projectPublicId') projectPublicId: string,
+ @Body('contractPublicId') contractPublicId: string | undefined,
@CurrentUser() user: User
): Promise<{ requestPublicId: string; jobId: string; status: string }> {
const queueSize = await this.aiQueueService.getBatchQueueSize();
@@ -515,6 +527,8 @@ export class AiController {
{
idempotencyKey: requestPublicId,
pdfPath: attachment.filePath,
+ projectPublicId,
+ contractPublicId,
}
);
return { requestPublicId, jobId, status: 'queued' };
@@ -544,7 +558,7 @@ export class AiController {
},
engineType: {
type: 'string',
- enum: ['auto', 'tesseract', 'typhoon-np-dms-ocr'],
+ enum: ['auto', 'tesseract', 'np-dms-ocr', 'typhoon-np-dms-ocr'],
description: 'OCR engine ที่ต้องการใช้ (default: auto)',
},
temperature: {
@@ -587,6 +601,7 @@ export class AiController {
const validEngineTypes = [
'auto',
'tesseract',
+ 'np-dms-ocr',
'typhoon-np-dms-ocr',
] as const;
const resolvedEngineType: SandboxOcrEngineType = validEngineTypes.includes(
@@ -627,14 +642,26 @@ export class AiController {
'รับ requestPublicId จาก Step 1 และ optional promptVersion แล้ว run LLM extraction',
})
async submitSandboxAiExtract(
- @Body() dto: { requestPublicId: string; promptVersion?: number }
+ @Body()
+ dto: {
+ requestPublicId: string;
+ promptVersion?: number;
+ projectPublicId: string;
+ contractPublicId?: string;
+ }
): Promise<{ requestPublicId: string; jobId: string; status: string }> {
- const { requestPublicId, promptVersion } = dto;
+ const {
+ requestPublicId,
+ promptVersion,
+ projectPublicId,
+ contractPublicId,
+ } = dto;
const jobId = await this.aiQueueService.enqueueSandboxJob(
'sandbox-ai-extract',
{
idempotencyKey: requestPublicId,
- projectPublicId: 'default', // Sandbox ใช้ default project
+ projectPublicId,
+ contractPublicId,
extraPayload: { promptVersion },
}
);
@@ -1096,4 +1123,169 @@ export class AiController {
}
return this.ocrService.selectOcrEngine(engineId, user.user_id);
}
+
+ // ─── Sandbox Parameter Management (ADR-036, T024-T026) ────────────────────
+
+ @Get('sandbox-profiles/:profileName')
+ @UseGuards(JwtAuthGuard, RbacGuard)
+ @ApiBearerAuth()
+ @RequirePermission('system.manage_all')
+ @ApiOperation({
+ summary:
+ 'Sandbox Parameters — ดึงค่า draft parameters สำหรับ profile (T024)',
+ description:
+ 'ดึงค่า sandbox draft ของ profile; ถ้ายังไม่มีจะ seed จาก production ก่อน',
+ })
+ @ApiParam({
+ name: 'profileName',
+ description: 'ชื่อ profile เช่น standard, quality, ocr-extract',
+ })
+ async getSandboxProfile(
+ @Param('profileName') profileName: string
+ ): Promise{children}
,
+ DialogFooter: ({ children }: { children: React.ReactNode }) =>