summaryrefslogtreecommitdiff
path: root/types/evaluation-form.ts
blob: 39b34bcdbc69ffd3922213767e2fcf50d2fde476 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// types/evaluation-form.ts

export interface AttachmentInfo {
    id: number
    originalFileName: string
    storedFileName: string
    publicPath: string
    fileSize: number
    mimeType?: string
    fileExtension?: string
    description?: string
    uploadedBy: number
    uploadedByName?: string
    createdAt: Date
    updatedAt: Date
  }
  
  export interface EvaluationQuestionItem {
    criteriaId: number
    category: string
    category2: string
    item: string
    classification: string
    range: string
    scoreType: 'fixed' | 'variable'
    remarks: string | null
    availableOptions: {
      detailId: number
      detail: string
      score: number
      orderIndex: number
    }[]
    
    // 현재 응답 정보
    responseId: number | null
    selectedDetailId: number | null
    currentScore: string | null
    currentComment: string | null
    
    // 📎 첨부파일 정보 추가
    attachments: AttachmentInfo[]
    attachmentCount: number
    attachmentTotalSize: number
  }
  
  export interface EvaluationFormData {
    evaluationInfo: {
      id: number
      periodicEvaluationId: number
      evaluationTargetReviewerId: number
      isCompleted: boolean
      departmentCode: string
      division: string
      materialType: string
      vendorName: string
      vendorCode: string
      reviewerType: string
    }
    questions: EvaluationQuestionItem[]
    
    // 📎 전체 첨부파일 통계
    attachmentStats: {
      totalFiles: number
      totalSize: number
      questionsWithAttachments: number
      filesByCategory: Record<string, number>
    }
  }


  // types/evaluation-detail.ts

export interface AttachmentDetail {
  id: number
  originalFileName: string
  storedFileName: string
  publicPath: string
  fileSize: number
  mimeType?: string
  fileExtension?: string
  description?: string
  uploadedBy: number
  uploadedByName?: string
  createdAt: Date
}

export interface EvaluationDetailItem {
  criteriaId: number
  category: string
  category2: string
  item: string
  classification: string
  range?: string
  remarks?: string
  scoreType: string
  selectedDetailId?: number | null
  selectedDetail?: string | null
  score: number | null
  comment?: string | null
  
  // 📎 첨부파일 정보 추가
  attachments: AttachmentDetail[]
  attachmentCount: number
  attachmentTotalSize: number
}

export interface EvaluationDetailData {
  reviewerEvaluationId: number
  reviewerName: string
  reviewerEmail: string
  departmentCode: string
  departmentName: string
  isCompleted: boolean
  completedAt?: Date | null
  reviewerComment?: string | null
  evaluationItems: EvaluationDetailItem[]
  
  // 📎 리뷰어별 첨부파일 통계
  totalAttachments: number
  totalAttachmentSize: number
  questionsWithAttachments: number
}

export interface EvaluationDetailResponse {
  evaluationInfo: {
    id: number
    vendorName: string
    vendorCode: string
    evaluationYear: number
    division: string
    status: string
  }
  reviewerDetails: EvaluationDetailData[]
  
  // 📎 전체 첨부파일 통계
  attachmentStats: {
    totalFiles: number
    totalSize: number
    reviewersWithAttachments: number
    questionsWithAttachments: number
  }
  
  // 🔄 조선/해양 취합 정보 (동시 평가인 경우)
  consolidatedInfo?: {
    shipbuildingScore: number | null
    shipbuildingGrade: string | null
    offshoreScore: number | null
    offshoreGrade: string | null
    consolidatedScore: number | null // 50% 반영 취합 점수
    consolidatedGrade: string | null // 취합 등급
  }
}