From 9def2eafe363d52fef5e3ae36c5f94218c65adfe Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 28 Feb 2026 16:08:02 +0700 Subject: [PATCH] 260228:1608 20260228:16:07 sync data dictionary with attachments schema addition --- .../03-01-data-dictionary.md | 140 +++++++++--------- 1 file changed, 71 insertions(+), 69 deletions(-) diff --git a/specs/03-Data-and-Storage/03-01-data-dictionary.md b/specs/03-Data-and-Storage/03-01-data-dictionary.md index c44eed1..ecfa2d3 100644 --- a/specs/03-Data-and-Storage/03-01-data-dictionary.md +++ b/specs/03-Data-and-Storage/03-01-data-dictionary.md @@ -1347,20 +1347,21 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga **Purpose**: Central repository for all file attachments in the system -| Column Name | Data Type | Constraints | Description | -| ------------------- | ------------ | --------------------------- | -------------------------------------------------------------- | -| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique attachment ID | -| original_filename | VARCHAR(255) | NOT NULL | Original filename from upload | -| stored_filename | VARCHAR(255) | NOT NULL | System-generated unique filename | -| file_path | VARCHAR(500) | NOT NULL | Full file path on server (/share/dms-data/) | -| mime_type | VARCHAR(100) | NOT NULL | MIME type (application/pdf, image/jpeg, etc.) | -| file_size | INT | NOT NULL | File size in bytes | -| uploaded_by_user_id | INT | NOT NULL, FK | User who uploaded file | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Upload timestamp | -| is_temporary | BOOLEAN | DEFAULT TRUE | ระบุว่าเป็นไฟล์ชั่วคราว (ยังไม่ได้ Commit) | -| temp_id\* | VARCHAR(100) | NULL | ID ชั่วคราวสำหรับอ้างอิงตอน Upload Phase 1 (อาจใช้ร่วมกับ id หรือแยกก็ได้) | -| expires_at | DATETIME | NULL | เวลาหมดอายุของไฟล์ Temp (เพื่อให้ Cron Job ลบออก) | -| checksum | VARCHAR(64) | NULL | SHA-256 Checksum สำหรับ Verify File Integrity [Req 3.9.3] | +| Column Name | Data Type | Constraints | Description | +| ------------------- | ------------ | --------------------------- | ------------------------------------------------------------------------ | +| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique attachment ID | +| original_filename | VARCHAR(255) | NOT NULL | Original filename from upload | +| stored_filename | VARCHAR(255) | NOT NULL | System-generated unique filename | +| file_path | VARCHAR(500) | NOT NULL | Full file path on server (/share/dms-data/) | +| mime_type | VARCHAR(100) | NOT NULL | MIME type (application/pdf, image/jpeg, etc.) | +| file_size | INT | NOT NULL | File size in bytes | +| uploaded_by_user_id | INT | NOT NULL, FK | User who uploaded file | +| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Upload timestamp | +| is_temporary | BOOLEAN | DEFAULT TRUE | ระบุว่าเป็นไฟล์ชั่วคราว (ยังไม่ได้ Commit) | +| temp_id\* | VARCHAR(100) | NULL | ID ชั่วคราวสำหรับอ้างอิงตอน Upload Phase 1 (อาจใช้ร่วมกับ id หรือแยกก็ได้) | +| expires_at | DATETIME | NULL | เวลาหมดอายุของไฟล์ Temp (เพื่อให้ Cron Job ลบออก) | +| checksum | VARCHAR(64) | NULL | SHA-256 Checksum สำหรับ Verify File Integrity [Req 3.9.3] | +| reference_date | DATE | NULL | Date used for folder structure (e.g. Issue Date) to prevent broken paths | **Indexes**: @@ -1370,6 +1371,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga * INDEX (mime_type) * INDEX (uploaded_by_user_id) * INDEX (created_at) +* INDEX (reference_date) **Relationships**: @@ -2049,82 +2051,82 @@ PARTITION BY RANGE (YEAR(created_at)) ( #### 16.3.1 migration_progress **Purpose**: เก็บ Checkpoint สถานะการ Migrate -| Column Name | Data Type | Constraints | Description | -| :--- | :--- | :--- | :--- | -| batch_id | VARCHAR(50) | PRIMARY KEY | รหัสชุดการ Migrate | -| last_processed_index | INT | DEFAULT 0 | ลำดับล่าสุดที่ประมวลผลผ่าน | -| status | ENUM | DEFAULT 'RUNNING' | สถานะ (RUNNING, COMPLETED, FAILED) | -| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | เวลาอัปเดตล่าสุด | +| Column Name | Data Type | Constraints | Description | +| :------------------- | :---------- | :---------------------------------- | :--------------------------------- | +| batch_id | VARCHAR(50) | PRIMARY KEY | รหัสชุดการ Migrate | +| last_processed_index | INT | DEFAULT 0 | ลำดับล่าสุดที่ประมวลผลผ่าน | +| status | ENUM | DEFAULT 'RUNNING' | สถานะ (RUNNING, COMPLETED, FAILED) | +| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | เวลาอัปเดตล่าสุด | #### 16.3.2 migration_review_queue **Purpose**: คิวเอกสารที่ต้องการให้เจ้าหน้าที่ตรวจสอบ (Confidence ต่ำกว่าเกณฑ์) *หมายเหตุ: เมื่อตรวจสอบผ่านและสร้าง Correspondence จริงแล้ว ข้อมูลในนี้อาจถูกลบหรือเก็บเป็น Log ได้* -| Column Name | Data Type | Constraints | Description | -| :--- | :--- | :--- | :--- | -| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | -| document_number | VARCHAR(100) | NOT NULL, UNIQUE | เลขที่เอกสาร (จาก OCR) | -| title | TEXT | | ชื่อเรื่อง | -| original_title | TEXT | | ชื่อเรื่องต้นฉบับก่อนตรวจสอบ | -| ai_suggested_category | VARCHAR(50) | | หมวดหมู่ที่ AI แนะนำ | -| ai_confidence | DECIMAL(4,3) | | ค่าความมั่นใจของ AI (0.000 - 1.000) | -| ai_issues | JSON | | รายละเอียดปัญหาที่ AI พบ | -| review_reason | VARCHAR(255) | | เหตุผลที่ต้องตรวจสอบ (เช่น Confidence ต่ำ) | -| status | ENUM | DEFAULT 'PENDING' | PENDING, APPROVED, REJECTED | -| reviewed_by | VARCHAR(100) | | ผู้ตรวจสอบ | -| reviewed_at | TIMESTAMP | NULL | เวลาที่ตรวจสอบ | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | วันที่บันทึกเข้าคิว | +| Column Name | Data Type | Constraints | Description | +| :-------------------- | :----------- | :-------------------------- | :---------------------------------- | +| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | +| document_number | VARCHAR(100) | NOT NULL, UNIQUE | เลขที่เอกสาร (จาก OCR) | +| title | TEXT | | ชื่อเรื่อง | +| original_title | TEXT | | ชื่อเรื่องต้นฉบับก่อนตรวจสอบ | +| ai_suggested_category | VARCHAR(50) | | หมวดหมู่ที่ AI แนะนำ | +| ai_confidence | DECIMAL(4,3) | | ค่าความมั่นใจของ AI (0.000 - 1.000) | +| ai_issues | JSON | | รายละเอียดปัญหาที่ AI พบ | +| review_reason | VARCHAR(255) | | เหตุผลที่ต้องตรวจสอบ (เช่น Confidence ต่ำ) | +| status | ENUM | DEFAULT 'PENDING' | PENDING, APPROVED, REJECTED | +| reviewed_by | VARCHAR(100) | | ผู้ตรวจสอบ | +| reviewed_at | TIMESTAMP | NULL | เวลาที่ตรวจสอบ | +| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | วันที่บันทึกเข้าคิว | #### 16.3.3 migration_errors **Purpose**: บันทึกข้อผิดพลาด (Errors) ระหว่างการทำงานของ n8n workflow -| Column Name | Data Type | Constraints | Description | -| :--- | :--- | :--- | :--- | -| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | -| batch_id | VARCHAR(50) | INDEX | รหัสชุดการ Migrate | -| document_number | VARCHAR(100) | | เลขที่เอกสาร | -| error_type | ENUM | INDEX | ประเภท Error (FILE_NOT_FOUND, AI_PARSE_ERROR, etc.) | -| error_message | TEXT | | รายละเอียด Error | -| raw_ai_response | TEXT | | Raw response จาก AI กรณีแปลผลไม่ได้ | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | วันที่บันทึก | +| Column Name | Data Type | Constraints | Description | +| :-------------- | :----------- | :-------------------------- | :-------------------------------------------------- | +| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | +| batch_id | VARCHAR(50) | INDEX | รหัสชุดการ Migrate | +| document_number | VARCHAR(100) | | เลขที่เอกสาร | +| error_type | ENUM | INDEX | ประเภท Error (FILE_NOT_FOUND, AI_PARSE_ERROR, etc.) | +| error_message | TEXT | | รายละเอียด Error | +| raw_ai_response | TEXT | | Raw response จาก AI กรณีแปลผลไม่ได้ | +| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | วันที่บันทึก | #### 16.3.4 migration_fallback_state **Purpose**: ติดตามสถานะ Fallback ของ AI (เช่น เปลี่ยน Model เมื่อ Error ถี่) -| Column Name | Data Type | Constraints | Description | -| :--- | :--- | :--- | :--- | -| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | -| batch_id | VARCHAR(50) | UNIQUE | รหัสชุดการ Migrate | -| recent_error_count | INT | DEFAULT 0 | จำนวน Error รวดล่าสุด | -| is_fallback_active | BOOLEAN | DEFAULT FALSE | สถานะการใช้งาน Fallback Model | -| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | เวลาอัปเดตล่าสุด | +| Column Name | Data Type | Constraints | Description | +| :----------------- | :---------- | :---------------------------------- | :--------------------------- | +| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | +| batch_id | VARCHAR(50) | UNIQUE | รหัสชุดการ Migrate | +| recent_error_count | INT | DEFAULT 0 | จำนวน Error รวดล่าสุด | +| is_fallback_active | BOOLEAN | DEFAULT FALSE | สถานะการใช้งาน Fallback Model | +| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | เวลาอัปเดตล่าสุด | #### 16.3.5 import_transactions **Purpose**: ป้องกันข้อมูลซ้ำ (Idempotency) ระหว่างการ Patch ข้อมูล -| Column Name | Data Type | Constraints | Description | -| :--- | :--- | :--- | :--- | -| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | -| idempotency_key | VARCHAR(255) | UNIQUE, NOT NULL | Key สำหรับเช็คซ้ำ | -| document_number | VARCHAR(100) | | เลขที่เอกสาร | -| batch_id | VARCHAR(100) | | รหัสชุดการ Migrate | -| status_code | INT | DEFAULT 201 | HTTP Status ของการ Import | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | วันที่บันทึก | +| Column Name | Data Type | Constraints | Description | +| :-------------- | :----------- | :-------------------------- | :------------------------ | +| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | +| idempotency_key | VARCHAR(255) | UNIQUE, NOT NULL | Key สำหรับเช็คซ้ำ | +| document_number | VARCHAR(100) | | เลขที่เอกสาร | +| batch_id | VARCHAR(100) | | รหัสชุดการ Migrate | +| status_code | INT | DEFAULT 201 | HTTP Status ของการ Import | +| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | วันที่บันทึก | #### 16.3.6 migration_daily_summary **Purpose**: สรุปยอดการทำงานรายวันแยกตาม Batch -| Column Name | Data Type | Constraints | Description | -| :--- | :--- | :--- | :--- | -| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | -| batch_id | VARCHAR(50) | UNIQUE KEY PART 1 | รหัสชุดการ Migrate | -| summary_date | DATE | UNIQUE KEY PART 2 | วันที่สรุป | -| total_processed | INT | DEFAULT 0 | จำนวนที่ประมวลผลรวม | -| auto_ingested | INT | DEFAULT 0 | จำนวนที่เข้าสู่ระบบสำเร็จ | -| sent_to_review | INT | DEFAULT 0 | จำนวนที่ส่งคิวตรวจสอบ | -| rejected | INT | DEFAULT 0 | จำนวนที่ถูกปฏิเสธ | -| errors | INT | DEFAULT 0 | จำนวนที่เกิด Error | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | วันที่บันทึก | +| Column Name | Data Type | Constraints | Description | +| :-------------- | :---------- | :-------------------------- | :---------------- | +| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique ID | +| batch_id | VARCHAR(50) | UNIQUE KEY PART 1 | รหัสชุดการ Migrate | +| summary_date | DATE | UNIQUE KEY PART 2 | วันที่สรุป | +| total_processed | INT | DEFAULT 0 | จำนวนที่ประมวลผลรวม | +| auto_ingested | INT | DEFAULT 0 | จำนวนที่เข้าสู่ระบบสำเร็จ | +| sent_to_review | INT | DEFAULT 0 | จำนวนที่ส่งคิวตรวจสอบ | +| rejected | INT | DEFAULT 0 | จำนวนที่ถูกปฏิเสธ | +| errors | INT | DEFAULT 0 | จำนวนที่เกิด Error | +| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | วันที่บันทึก | --- ## **17. 📈 Monitoring & Maintenance (การดูแลรักษา)**