feat(rfa-ai): Complete RFA Approval Refactor and AI Model Revision
CI / CD Pipeline / build (push) Successful in 4m54s
CI / CD Pipeline / deploy (push) Failing after 12m9s

This commit is contained in:
2026-05-16 10:59:53 +07:00
parent 6cb3ae10ee
commit 1a162bf320
105 changed files with 5088 additions and 1083 deletions
+21 -1
View File
@@ -70,5 +70,25 @@
"ai.staging.body": "Body",
"ai.staging.approve": "Approve",
"ai.staging.approveSuccess": "Staging record approved.",
"ai.staging.approveError": "Unable to approve staging record."
"ai.staging.approveError": "Unable to approve staging record.",
"ai.staging.queueTab": "Work Queue",
"ai.staging.analyticsTab": "AI Analytics",
"ai.staging.analyticsError": "Unable to load analytics data.",
"ai.staging.avgConfidence": "Avg. Confidence",
"ai.staging.overrideRate": "Human Override Rate",
"ai.staging.rejectedRate": "Rejection Rate",
"ai.staging.byDocumentType": "Stats by Document Type",
"ai.staging.byDocumentTypeDesc": "Compare AI performance across different document categories.",
"ai.staging.documents": "docs",
"ai.staging.confidence": "Confidence",
"ai.staging.override": "Override",
"ai.staging.rejected": "Rejected",
"ai.staging.thresholdRecalibration": "Threshold Recalibration",
"ai.staging.thresholdDesc": "Verify confidence thresholds for auto-approval vs human review.",
"ai.staging.highThreshold": "High Threshold (Auto-approve)",
"ai.staging.midThreshold": "Mid Threshold (Human Review)",
"ai.staging.thresholdWarning": "Improvement Recommended",
"ai.staging.thresholdWarningDesc": "Override rate reached {{rate}}% in recent records.",
"ai.staging.thresholdNote": "* Threshold values must be set via Backend Environment Variables.",
"ai.staging.thresholdDocs": "View Configuration Guide"
}
@@ -0,0 +1,72 @@
{
"title": "Task Delegation",
"subtitle": "Manage delegation of review tasks to others",
"list": {
"title": "Delegation List",
"createButton": "Create Delegation",
"noActive": "No active delegations",
"historyButton": "Delegation History"
},
"form": {
"createTitle": "Create Delegation",
"editTitle": "Edit Delegation",
"delegateTo": "Delegate To",
"delegateToPlaceholder": "Select user...",
"startDate": "Start Date",
"endDate": "End Date",
"scope": "Delegation Scope",
"scopeOptions": {
"ALL": "All",
"DISCIPLINE": "Discipline Only",
"PROJECT": "Project Only"
},
"reason": "Reason",
"reasonPlaceholder": "Enter reason for delegation...",
"saveButton": "Save",
"cancelButton": "Cancel",
"revokeButton": "Revoke Delegation"
},
"status": {
"active": "Active",
"expired": "Expired",
"revoked": "Revoked",
"upcoming": "Starting Soon"
},
"badge": {
"delegatedFrom": "Delegated from: {{name}}",
"delegatedTo": "Delegated to: {{name}}",
"until": "Until: {{date}}"
},
"notifications": {
"createdTitle": "Delegation Received",
"createdBody": "{{delegator}} has delegated review tasks to you",
"expiringTitle": "Delegation Expiring Soon",
"expiringBody": "Delegation will expire in {{days}} days",
"expiredTitle": "Delegation Expired",
"expiredBody": "Delegation has expired. Tasks returned to delegator"
},
"errors": {
"delegateToRequired": "Please select delegatee",
"startDateRequired": "Start date is required",
"endDateRequired": "End date is required",
"invalidDateRange": "End date must be after start date",
"circularDelegation": "Circular delegation not allowed ({{path}})",
"selfDelegation": "Cannot delegate to yourself",
"overlapExists": "Overlapping delegation already exists",
"loadFailed": "Failed to load data",
"saveFailed": "Failed to save delegation",
"revokeFailed": "Failed to revoke delegation"
},
"success": {
"created": "Delegation created successfully",
"updated": "Delegation updated successfully",
"revoked": "Delegation revoked successfully"
}
}
@@ -0,0 +1,79 @@
{
"title": "Response Codes",
"subtitle": "Manage review response codes and implications",
"list": {
"title": "Response Code List",
"createButton": "Create New Code",
"searchPlaceholder": "Search codes...",
"noResults": "No response codes found",
"filterByCategory": "Filter by Category"
},
"categories": {
"ENGINEERING": "Engineering",
"CONTRACT": "Contract",
"QUALITY": "Quality",
"SAFETY": "Safety",
"PROCUREMENT": "Procurement",
"GENERAL": "General"
},
"form": {
"createTitle": "Create Response Code",
"editTitle": "Edit Response Code",
"code": "Code",
"codePlaceholder": "e.g., 1A, 1B, 2",
"subStatus": "Sub-status",
"subStatusPlaceholder": "e.g., A, B, C",
"category": "Category",
"description": "Description",
"descriptionPlaceholder": "Description of response code",
"descriptionThai": "Description (Thai)",
"implications": "Implications",
"implicationsPlaceholder": "Implications when this code is selected",
"notifyRoles": "Notify Roles",
"isActive": "Active",
"saveButton": "Save",
"cancelButton": "Cancel"
},
"selector": {
"placeholder": "Select response code...",
"filterByDocType": "Filter by Document Type",
"loading": "Loading..."
},
"implications": {
"title": "Code Implications",
"critical": "Critical",
"warning": "Warning",
"info": "Info",
"notificationsSent": "Notifications will be sent to: {{roles}}"
},
"matrix": {
"title": "Master Approval Matrix",
"subtitle": "Define response codes by document type",
"docType": "Document Type",
"applicableCodes": "Applicable Codes",
"projectOverride": "Project Override",
"inheritanceNote": "Inherited from default",
"addOverride": "Add Project Override"
},
"errors": {
"codeRequired": "Code is required",
"codeExists": "Code already exists",
"categoryRequired": "Please select a category",
"invalidCode": "Invalid code format",
"loadFailed": "Failed to load codes",
"saveFailed": "Failed to save code"
},
"success": {
"created": "Code created successfully",
"updated": "Code updated successfully",
"deleted": "Code deleted successfully"
}
}
+104
View File
@@ -0,0 +1,104 @@
{
"title": "Review Tasks",
"subtitle": "Manage document review tasks and track status",
"inbox": {
"title": "Review Inbox",
"pending": "Pending",
"inProgress": "In Progress",
"completed": "Completed",
"delegated": "Delegated",
"noTasks": "No review tasks",
"filterAll": "All",
"filterByProject": "Filter by Project",
"filterByDiscipline": "Filter by Discipline"
},
"status": {
"PENDING": "Pending",
"IN_PROGRESS": "In Progress",
"COMPLETED": "Completed",
"DELEGATED": "Delegated",
"OVERDUE": "Overdue"
},
"actions": {
"start": "Start Review",
"complete": "Complete Review",
"delegate": "Delegate",
"return": "Return",
"viewDetails": "View Details",
"addComment": "Add Comment",
"viewDocument": "View Document"
},
"form": {
"completeTitle": "Complete Review",
"responseCode": "Response Code",
"responseCodePlaceholder": "Select code...",
"comments": "Comments",
"commentsPlaceholder": "Enter comments...",
"attachments": "Attachments",
"addAttachment": "Add File",
"confirmComplete": "Confirm completion?",
"saveButton": "Save",
"cancelButton": "Cancel"
},
"progress": {
"title": "Review Progress",
"completedOf": "{{completed}}/{{total}} Completed",
"consensusStatus": "Consensus Status: {{status}}",
"waitingFor": "Waiting for: {{disciplines}}",
"parallelReview": "Parallel Review",
"sequentialReview": "Sequential Review"
},
"veto": {
"button": "Veto Override",
"title": "Veto Override - Force Approval",
"justification": "Justification for Override",
"justificationPlaceholder": "Enter justification for forcing approval...",
"confirm": "Confirm Veto Override",
"warning": "This action will be logged in Audit Log and notify relevant teams",
"pmOnly": "Project Manager Only"
},
"consensus": {
"APPROVED": "Approved",
"APPROVED_WITH_COMMENTS": "Approved with Comments",
"REJECTED": "Rejected",
"PENDING": "Pending",
"VETO_OVERRIDE": "Veto Override",
"calculating": "Calculating consensus..."
},
"reminders": {
"dueSoon": "Due in {{days}} days",
"overdue": "Overdue by {{days}} days",
"escalationLevel1": "Escalation Level 1",
"escalationLevel2": "Escalation Level 2"
},
"confirmation": {
"title": "Confirm Action",
"message": "Are you sure you want to proceed with this action?",
"confirmButton": "Confirm",
"cancelButton": "Cancel"
},
"errors": {
"loadFailed": "Failed to load review tasks",
"completeFailed": "Failed to complete review",
"responseCodeRequired": "Please select a response code",
"raceCondition": "Task status changed, please refresh and try again",
"unauthorized": "You are not authorized for this action"
},
"success": {
"started": "Review started successfully",
"completed": "Review completed successfully",
"delegated": "Delegated successfully",
"commentAdded": "Comment added successfully"
}
}
@@ -0,0 +1,70 @@
{
"title": "Review Team Management",
"subtitle": "Create and manage document review teams by discipline",
"list": {
"title": "Review Team List",
"createButton": "Create New Team",
"searchPlaceholder": "Search teams...",
"noResults": "No review teams found",
"teamCount": "{{count}} teams",
"memberCount": "{{count}} members"
},
"form": {
"createTitle": "Create Review Team",
"editTitle": "Edit Review Team",
"name": "Team Name",
"namePlaceholder": "Enter team name",
"description": "Description",
"descriptionPlaceholder": "Enter team description (optional)",
"disciplines": "Responsible Disciplines",
"disciplinesPlaceholder": "Select disciplines...",
"rfaTypes": "RFA Types to Review",
"rfaTypesPlaceholder": "Select RFA types...",
"isActive": "Active",
"isDefault": "Set as Default",
"saveButton": "Save",
"cancelButton": "Cancel",
"deleteButton": "Delete Team",
"confirmDelete": "Confirm delete this team?"
},
"members": {
"title": "Team Members",
"addButton": "Add Member",
"removeButton": "Remove from Team",
"role": {
"LEAD": "Team Lead",
"REVIEWER": "Reviewer",
"OBSERVER": "Observer"
},
"noMembers": "No members in this team yet",
"searchUserPlaceholder": "Search users..."
},
"status": {
"active": "Active",
"inactive": "Inactive",
"default": "Default"
},
"errors": {
"nameRequired": "Team name is required",
"nameExists": "Team name already exists",
"disciplineRequired": "Please select at least one discipline",
"memberRequired": "Please add at least one member",
"leadRequired": "Team must have at least one lead",
"loadFailed": "Failed to load team data",
"saveFailed": "Failed to save team",
"deleteFailed": "Failed to delete team"
},
"success": {
"created": "Team created successfully",
"updated": "Team updated successfully",
"deleted": "Team deleted successfully",
"memberAdded": "Member added successfully",
"memberRemoved": "Member removed successfully"
}
}
+21 -1
View File
@@ -70,5 +70,25 @@
"ai.staging.body": "เนื้อหา",
"ai.staging.approve": "อนุมัติ",
"ai.staging.approveSuccess": "อนุมัติรายการเรียบร้อยแล้ว",
"ai.staging.approveError": "ไม่สามารถอนุมัติรายการได้"
"ai.staging.approveError": "ไม่สามารถอนุมัติรายการได้",
"ai.staging.queueTab": "คิวงาน",
"ai.staging.analyticsTab": "AI Analytics",
"ai.staging.analyticsError": "ไม่สามารถโหลดข้อมูลสถิติได้",
"ai.staging.avgConfidence": "ความมั่นใจเฉลี่ย",
"ai.staging.overrideRate": "อัตราการแก้ไขโดยมนุษย์",
"ai.staging.rejectedRate": "อัตราการปฏิเสธ",
"ai.staging.byDocumentType": "สถิติแยกตามประเภทเอกสาร",
"ai.staging.byDocumentTypeDesc": "เปรียบเทียบประสิทธิภาพของ AI ในแต่ละประเภทเอกสาร",
"ai.staging.documents": "ฉบับ",
"ai.staging.confidence": "ความมั่นใจ",
"ai.staging.override": "แก้ไข",
"ai.staging.rejected": "ปฏิเสธ",
"ai.staging.thresholdRecalibration": "Threshold Recalibration",
"ai.staging.thresholdDesc": "ตรวจสอบความเหมาะสมของค่าความมั่นใจ (Confidence Threshold)",
"ai.staging.highThreshold": "High Threshold (Auto-approve)",
"ai.staging.midThreshold": "Mid Threshold (Human Review)",
"ai.staging.thresholdWarning": "ควรปรับปรุง Model หรือ Threshold",
"ai.staging.thresholdWarningDesc": "ตรวจพบอัตราการแก้ไขสูงถึง {{rate}}% ในช่วงที่ผ่านมา",
"ai.staging.thresholdNote": "* การเปลี่ยนค่า Threshold ต้องทำผ่าน Environment Variables ของ Backend",
"ai.staging.thresholdDocs": "อ่านคู่มือการตั้งค่า"
}
@@ -0,0 +1,72 @@
{
"title": "การมอบหมายงานแทน",
"subtitle": "จัดการการมอบหมายงานตรวจสอบให้ผู้อื่นทำแทน",
"list": {
"title": "รายการมอบหมายงาน",
"createButton": "สร้างการมอบหมาย",
"noActive": "ไม่มีการมอบหมายงานที่ active",
"historyButton": "ประวัติการมอบหมาย"
},
"form": {
"createTitle": "สร้างการมอบหมายงาน",
"editTitle": "แก้ไขการมอบหมายงาน",
"delegateTo": "มอบหมายให้",
"delegateToPlaceholder": "เลือกผู้ใช้...",
"startDate": "วันที่เริ่มต้น",
"endDate": "วันที่สิ้นสุด",
"scope": "ขอบเขตการมอบหมาย",
"scopeOptions": {
"ALL": "ทั้งหมด",
"DISCIPLINE": "เฉพาะสาขา",
"PROJECT": "เฉพาะโครงการ"
},
"reason": "เหตุผล",
"reasonPlaceholder": "ระบุเหตุผลการมอบหมายงาน...",
"saveButton": "บันทึก",
"cancelButton": "ยกเลิก",
"revokeButton": "ยกเลิกการมอบหมาย"
},
"status": {
"active": "Active",
"expired": "หมดอายุ",
"revoked": "ถูกยกเลิก",
"upcoming": "เริ่มเร็วๆ นี้"
},
"badge": {
"delegatedFrom": "มอบหมายจาก: {{name}}",
"delegatedTo": "มอบหมายให้: {{name}}",
"until": "จนถึง: {{date}}"
},
"notifications": {
"createdTitle": "ได้รับการมอบหมายงาน",
"createdBody": "{{delegator}} ได้มอบหมายงานตรวจสอบให้คุณ",
"expiringTitle": "การมอบหมายงานใกล้หมดอายุ",
"expiringBody": "การมอบหมายงานจะหมดอายุใน {{days}} วัน",
"expiredTitle": "การมอบหมายงานหมดอายุ",
"expiredBody": "การมอบหมายงานได้หมดอายุแล้ว งานจะกลับมาที่ผู้มอบหมาย"
},
"errors": {
"delegateToRequired": "กรุณาเลือกผู้รับมอบหมาย",
"startDateRequired": "กรุณาระบุวันที่เริ่มต้น",
"endDateRequired": "กรุณาระบุวันที่สิ้นสุด",
"invalidDateRange": "วันที่สิ้นสุดต้องมากกว่าวันที่เริ่มต้น",
"circularDelegation": "ไม่สามารถมอบหมายแบบวนซ้ำได้ ({{path}})",
"selfDelegation": "ไม่สามารถมอบหมายให้ตัวเองได้",
"overlapExists": "มีการมอบหมายที่ซ้อนทับกันอยู่แล้ว",
"loadFailed": "ไม่สามารถโหลดข้อมูลได้",
"saveFailed": "ไม่สามารถบันทึกการมอบหมายได้",
"revokeFailed": "ไม่สามารถยกเลิกการมอบหมายได้"
},
"success": {
"created": "สร้างการมอบหมายสำเร็จ",
"updated": "อัปเดตการมอบหมายสำเร็จ",
"revoked": "ยกเลิกการมอบหมายสำเร็จ"
}
}
@@ -0,0 +1,79 @@
{
"title": "รหัสผลการตรวจสอบ",
"subtitle": "จัดการรหัสผลการตรวจสอบและผลกระทบ",
"list": {
"title": "รายการรหัสผลตรวจสอบ",
"createButton": "สร้างรหัสใหม่",
"searchPlaceholder": "ค้นหารหัส...",
"noResults": "ไม่พบรหัสผลตรวจสอบ",
"filterByCategory": "กรองตามหมวดหมู่"
},
"categories": {
"ENGINEERING": "วิศวกรรม",
"CONTRACT": "สัญญา",
"QUALITY": "คุณภาพ",
"SAFETY": "ความปลอดภัย",
"PROCUREMENT": "จัดซื้อ",
"GENERAL": "ทั่วไป"
},
"form": {
"createTitle": "สร้างรหัสผลตรวจสอบ",
"editTitle": "แก้ไขรหัสผลตรวจสอบ",
"code": "รหัส",
"codePlaceholder": "เช่น 1A, 1B, 2",
"subStatus": "สถานะย่อย",
"subStatusPlaceholder": "เช่น A, B, C",
"category": "หมวดหมู่",
"description": "คำอธิบาย",
"descriptionPlaceholder": "คำอธิบายรหัสผลตรวจสอบ",
"descriptionThai": "คำอธิบาย (ภาษาไทย)",
"implications": "ผลกระทบ",
"implicationsPlaceholder": "ผลกระทบที่เกิดขึ้นเมื่อเลือกรหัสนี้",
"notifyRoles": "แจ้งเตือนถึงบทบาท",
"isActive": "เปิดใช้งาน",
"saveButton": "บันทึก",
"cancelButton": "ยกเลิก"
},
"selector": {
"placeholder": "เลือกรหัสผลตรวจสอบ...",
"filterByDocType": "กรองตามประเภทเอกสาร",
"loading": "กำลังโหลด..."
},
"implications": {
"title": "ผลกระทบจากรหัส",
"critical": "สำคัญ",
"warning": "คำเตือน",
"info": "ข้อมูล",
"notificationsSent": "จะมีการแจ้งเตือนไปยัง: {{roles}}"
},
"matrix": {
"title": "Master Approval Matrix",
"subtitle": "กำหนดรหัสผลตรวจสอบตามประเภทเอกสาร",
"docType": "ประเภทเอกสาร",
"applicableCodes": "รหัสที่ใช้ได้",
"projectOverride": "การตั้งค่าเฉพาะโครงการ",
"inheritanceNote": "สืบทอดจากค่าเริ่มต้น",
"addOverride": "เพิ่มการตั้งค่าเฉพาะโครงการ"
},
"errors": {
"codeRequired": "กรุณาระบุรหัส",
"codeExists": "รหัสนี้มีอยู่แล้ว",
"categoryRequired": "กรุณาเลือกหมวดหมู่",
"invalidCode": "รูปแบบรหัสไม่ถูกต้อง",
"loadFailed": "ไม่สามารถโหลดรหัสได้",
"saveFailed": "ไม่สามารถบันทึกรหัสได้"
},
"success": {
"created": "สร้างรหัสสำเร็จ",
"updated": "อัปเดตรหัสสำเร็จ",
"deleted": "ลบรหัสสำเร็จ"
}
}
+104
View File
@@ -0,0 +1,104 @@
{
"title": "งานตรวจสอบ",
"subtitle": "จัดการงานตรวจสอบเอกสารและติดตามสถานะ",
"inbox": {
"title": "กล่องงานตรวจสอบ",
"pending": "รอดำเนินการ",
"inProgress": "กำลังดำเนินการ",
"completed": "เสร็จสิ้น",
"delegated": "มอบหมายแล้ว",
"noTasks": "ไม่มีงานตรวจสอบ",
"filterAll": "ทั้งหมด",
"filterByProject": "กรองตามโครงการ",
"filterByDiscipline": "กรองตามสาขา"
},
"status": {
"PENDING": "รอดำเนินการ",
"IN_PROGRESS": "กำลังดำเนินการ",
"COMPLETED": "เสร็จสิ้น",
"DELEGATED": "มอบหมายแล้ว",
"OVERDUE": "เลยกำหนด"
},
"actions": {
"start": "เริ่มตรวจสอบ",
"complete": "ดำเนินการเสร็จสิ้น",
"delegate": "มอบหมาย",
"return": "ส่งคืน",
"viewDetails": "ดูรายละเอียด",
"addComment": "เพิ่มความเห็น",
"viewDocument": "ดูเอกสาร"
},
"form": {
"completeTitle": "ดำเนินการตรวจสอบ",
"responseCode": "รหัสผลตรวจสอบ",
"responseCodePlaceholder": "เลือกรหัส...",
"comments": "ความเห็น",
"commentsPlaceholder": "ระบุความเห็นประกอบ...",
"attachments": "ไฟล์แนบ",
"addAttachment": "เพิ่มไฟล์",
"confirmComplete": "ยืนยันการดำเนินการเสร็จสิ้น?",
"saveButton": "บันทึก",
"cancelButton": "ยกเลิก"
},
"progress": {
"title": "ความคืบหน้าการตรวจสอบ",
"completedOf": "{{completed}}/{{total}} เสร็จสิ้น",
"consensusStatus": "สถานะฉันทามติ: {{status}}",
"waitingFor": "รอจาก: {{disciplines}}",
"parallelReview": "การตรวจสอบแบบขนาน",
"sequentialReview": "การตรวจสอบแบบลำดับ"
},
"veto": {
"button": "Veto Override",
"title": "Veto Override - บังคับอนุมัติ",
"justification": "เหตุผลในการบังคับอนุมัติ",
"justificationPlaceholder": "ระบุเหตุผลที่จำเป็นต้องบังคับอนุมัติ...",
"confirm": "ยืนยัน Veto Override",
"warning": "การกระทำนี้จะถูกบันทึกใน Audit Log และแจ้งเตือนทีมงานที่เกี่ยวข้อง",
"pmOnly": "เฉพาะ Project Manager เท่านั้น"
},
"consensus": {
"APPROVED": "อนุมัติ",
"APPROVED_WITH_COMMENTS": "อนุมัติพร้อมความเห็น",
"REJECTED": "ไม่อนุมัติ",
"PENDING": "รอการพิจารณา",
"VETO_OVERRIDE": "Veto Override",
"calculating": "กำลังคำนวณฉันทามติ..."
},
"reminders": {
"dueSoon": "ครบกำหนดใน {{days}} วัน",
"overdue": "เลยกำหนด {{days}} วัน",
"escalationLevel1": "การแจ้งเตือนระดับ 1",
"escalationLevel2": "การแจ้งเตือนระดับ 2"
},
"confirmation": {
"title": "ยืนยันการดำเนินการ",
"message": "คุณแน่ใจหรือไม่ว่าต้องการดำเนินการนี้?",
"confirmButton": "ยืนยัน",
"cancelButton": "ยกเลิก"
},
"errors": {
"loadFailed": "ไม่สามารถโหลดงานตรวจสอบได้",
"completeFailed": "ไม่สามารถดำเนินการเสร็จสิ้นได้",
"responseCodeRequired": "กรุณาเลือกรหัสผลตรวจสอบ",
"raceCondition": "สถานะงานมีการเปลี่ยนแปลง กรุณารีเฟรชและลองใหม่",
"unauthorized": "คุณไม่มีสิทธิ์ดำเนินการนี้"
},
"success": {
"started": "เริ่มตรวจสอบสำเร็จ",
"completed": "ดำเนินการเสร็จสิ้นสำเร็จ",
"delegated": "มอบหมายสำเร็จ",
"commentAdded": "เพิ่มความเห็นสำเร็จ"
}
}
@@ -0,0 +1,70 @@
{
"title": "จัดการทีมตรวจสอบ",
"subtitle": "สร้างและจัดการทีมตรวจสอบเอกสารตามสาขา",
"list": {
"title": "รายการทีมตรวจสอบ",
"createButton": "สร้างทีมใหม่",
"searchPlaceholder": "ค้นหาทีม...",
"noResults": "ไม่พบทีมตรวจสอบ",
"teamCount": "{{count}} ทีม",
"memberCount": "{{count}} สมาชิก"
},
"form": {
"createTitle": "สร้างทีมตรวจสอบ",
"editTitle": "แก้ไขทีมตรวจสอบ",
"name": "ชื่อทีม",
"namePlaceholder": "ระบุชื่อทีมตรวจสอบ",
"description": "รายละเอียด",
"descriptionPlaceholder": "ระบุรายละเอียดทีม (ถ้ามี)",
"disciplines": "สาขาที่รับผิดชอบ",
"disciplinesPlaceholder": "เลือกสาขา...",
"rfaTypes": "ประเภท RFA ที่ตรวจสอบ",
"rfaTypesPlaceholder": "เลือกประเภท RFA...",
"isActive": "เปิดใช้งาน",
"isDefault": "ตั้งเป็นค่าเริ่มต้น",
"saveButton": "บันทึก",
"cancelButton": "ยกเลิก",
"deleteButton": "ลบทีม",
"confirmDelete": "ยืนยันการลบทีมนี้?"
},
"members": {
"title": "สมาชิกทีม",
"addButton": "เพิ่มสมาชิก",
"removeButton": "ลบออกจากทีม",
"role": {
"LEAD": "หัวหน้าทีม",
"REVIEWER": "ผู้ตรวจสอบ",
"OBSERVER": "ผู้สังเกตการณ์"
},
"noMembers": "ยังไม่มีสมาชิกในทีม",
"searchUserPlaceholder": "ค้นหาผู้ใช้..."
},
"status": {
"active": "เปิดใช้งาน",
"inactive": "ปิดใช้งาน",
"default": "ค่าเริ่มต้น"
},
"errors": {
"nameRequired": "กรุณาระบุชื่อทีม",
"nameExists": "ชื่อทีมนี้มีอยู่แล้ว",
"disciplineRequired": "กรุณาเลือกอย่างน้อยหนึ่งสาขา",
"memberRequired": "กรุณาเพิ่มอย่างน้อยหนึ่งสมาชิก",
"leadRequired": "ทีมต้องมีหัวหน้าทีมอย่างน้อยหนึ่งคน",
"loadFailed": "ไม่สามารถโหลดข้อมูลทีมได้",
"saveFailed": "ไม่สามารถบันทึกทีมได้",
"deleteFailed": "ไม่สามารถลบทีมได้"
},
"success": {
"created": "สร้างทีมสำเร็จ",
"updated": "อัปเดตทีมสำเร็จ",
"deleted": "ลบทีมสำเร็จ",
"memberAdded": "เพิ่มสมาชิกสำเร็จ",
"memberRemoved": "ลบสมาชิกสำเร็จ"
}
}