summaryrefslogtreecommitdiff
path: root/types
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-08-06 04:23:40 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-08-06 04:23:40 +0000
commitde2ac5a2860bc25180971e7a11f852d9d44675b7 (patch)
treeb931c363f2cb19e177a0a7b17190d5de2a82d709 /types
parent6c549b0f264e9be4d60af38f9efc05b189d6849f (diff)
(대표님) 정기평가, 법적검토, 정책, 가입관련 처리 및 관련 컴포넌트 추가, 메뉴 변경
Diffstat (limited to 'types')
-rw-r--r--types/legal.ts152
-rw-r--r--types/policy.ts48
2 files changed, 200 insertions, 0 deletions
diff --git a/types/legal.ts b/types/legal.ts
new file mode 100644
index 00000000..67322c22
--- /dev/null
+++ b/types/legal.ts
@@ -0,0 +1,152 @@
+// lib/legal-works/types.ts
+
+import { getLegalWorks } from "@/lib/legal-review/service"
+
+// 조회된 법무업무 데이터 타입
+export type LegalWorkData = Awaited<ReturnType<typeof getLegalWorks>>["data"][0]
+
+// 법무업무 목록 응답 타입
+export type LegalWorksResponse = Awaited<ReturnType<typeof getLegalWorks>>
+
+// 테이블 상태 관련 타입들
+export interface LegalWorkTableState {
+ selectedIds: number[]
+ isLoading: boolean
+ error?: string
+}
+
+// 필터 옵션들
+export const LEGAL_WORK_FILTER_OPTIONS = {
+ categories: [
+ { label: "CP", value: "CP" },
+ { label: "GTC", value: "GTC" },
+ { label: "기타", value: "기타" },
+ ],
+ statuses: [
+ { label: "검토요청", value: "검토요청" },
+ { label: "담당자배정", value: "담당자배정" },
+ { label: "검토중", value: "검토중" },
+ { label: "답변완료", value: "답변완료" },
+ { label: "재검토요청", value: "재검토요청" },
+ { label: "보류", value: "보류" },
+ { label: "취소", value: "취소" },
+ ],
+ reviewDepartments: [
+ { label: "준법문의", value: "준법문의" },
+ { label: "법무검토", value: "법무검토" },
+ ],
+ inquiryTypes: [
+ { label: "국내계약", value: "국내계약" },
+ { label: "국내자문", value: "국내자문" },
+ { label: "해외계약", value: "해외계약" },
+ { label: "해외자문", value: "해외자문" },
+ ],
+ sourceTypes: [
+ { label: "22번화면 이관", value: "interface" },
+ { label: "신규 생성", value: "manual" },
+ ],
+ urgencyTypes: [
+ { label: "긴급", value: "true" },
+ { label: "일반", value: "false" },
+ ],
+ attachmentTypes: [
+ { label: "있음", value: "true" },
+ { label: "없음", value: "false" },
+ ],
+} as const
+
+// 상태별 색상 매핑
+export const STATUS_COLOR_MAP = {
+ "검토요청": "bg-blue-100 text-blue-800 border-blue-200",
+ "담당자배정": "bg-yellow-100 text-yellow-800 border-yellow-200",
+ "검토중": "bg-orange-100 text-orange-800 border-orange-200",
+ "답변완료": "bg-green-100 text-green-800 border-green-200",
+ "재검토요청": "bg-purple-100 text-purple-800 border-purple-200",
+ "보류": "bg-gray-100 text-gray-800 border-gray-200",
+ "취소": "bg-red-100 text-red-800 border-red-200",
+} as const
+
+// 구분별 색상 매핑
+export const CATEGORY_COLOR_MAP = {
+ "CP": "bg-blue-500 text-white",
+ "GTC": "bg-emerald-500 text-white",
+ "기타": "bg-gray-500 text-white",
+} as const
+
+// 검토부문별 색상 매핑
+export const REVIEW_DEPARTMENT_COLOR_MAP = {
+ "준법문의": "bg-blue-500 text-white",
+ "법무검토": "bg-green-500 text-white",
+} as const
+
+// 문의종류별 색상 매핑
+export const INQUIRY_TYPE_COLOR_MAP = {
+ "국내계약": "bg-indigo-500 text-white",
+ "국내자문": "bg-purple-500 text-white",
+ "해외계약": "bg-teal-500 text-white",
+ "해외자문": "bg-cyan-500 text-white",
+} as const
+
+// 우선순위 매핑
+export const PRIORITY_MAP = {
+ high: { label: "긴급", color: "bg-red-500 text-white" },
+ normal: { label: "보통", color: "bg-blue-500 text-white" },
+ low: { label: "낮음", color: "bg-gray-500 text-white" },
+} as const
+
+// 법무업무 생성 관련 타입들
+export interface CreateLegalWorkPayload {
+ category: "CP" | "GTC" | "기타"
+ vendorId: number
+ isUrgent: boolean
+ reviewDepartment: "준법문의" | "법무검토"
+ inquiryType?: "국내계약" | "국내자문" | "해외계약" | "해외자문"
+ title: string
+ requestContent: string
+ requestDate: string
+ isPublic?: boolean
+ sourceType?: "interface" | "manual"
+ originalInterfaceId?: number
+}
+
+// 검토요청 관련 타입들
+export interface RequestReviewPayload {
+ workIds: number[]
+ priority: "high" | "normal" | "low"
+ dueDate: string
+ assignee?: string
+ reviewNotes?: string
+ notificationMethod: "email" | "internal" | "both"
+}
+
+// 필터 관련 타입들
+export interface LegalWorkFilter {
+ category?: string[]
+ status?: string[]
+ reviewDepartment?: string[]
+ inquiryType?: string[]
+ isUrgent?: boolean
+ hasAttachment?: boolean
+ vendorCode?: string
+ vendorName?: string
+ reviewer?: string
+ legalResponder?: string
+ dateRange?: {
+ field: "requestDate" | "consultationDate" | "expectedAnswerDate" | "legalCompletionDate" | "createdAt"
+ from?: string
+ to?: string
+ }
+}
+
+// 통계 관련 타입들
+export interface LegalWorkStats {
+ total: number
+ pending: number
+ assigned: number
+ inProgress: number
+ completed: number
+ urgent: number
+ byCategory: Record<string, number>
+ byStatus: Record<string, number>
+ byReviewDepartment: Record<string, number>
+} \ No newline at end of file
diff --git a/types/policy.ts b/types/policy.ts
new file mode 100644
index 00000000..fbe0bb81
--- /dev/null
+++ b/types/policy.ts
@@ -0,0 +1,48 @@
+export interface PolicyData {
+ id: number
+ policyType: 'privacy_policy' | 'terms_of_service'
+ version: string
+ content: string
+ effectiveDate: string
+ isCurrent: boolean
+ createdAt: string
+ }
+
+ export interface PolicyVersions {
+ privacy_policy: PolicyData
+ terms_of_service: PolicyData
+ }
+
+ export interface ConsentData {
+ privacy: boolean
+ terms: boolean
+ marketing: boolean
+ }
+
+ export interface ConsentRecord {
+ id: number
+ userId: number
+ consentType: 'privacy_policy' | 'terms_of_service' | 'marketing' | 'optional'
+ consentStatus: boolean
+ policyVersion: string
+ consentedAt: string
+ ipAddress?: string
+ userAgent?: string
+ revokedAt?: string
+ revokeReason?: string
+ }
+
+ export interface ConsentLogRecord {
+ id: number
+ userId: number
+ consentType: 'privacy_policy' | 'terms_of_service' | 'marketing' | 'optional'
+ action: 'consent' | 'revoke' | 'update'
+ oldStatus?: boolean
+ newStatus: boolean
+ policyVersion: string
+ ipAddress?: string
+ userAgent?: string
+ actionTimestamp: string
+ additionalData?: any
+ }
+ \ No newline at end of file