@@ -86,12 +90,12 @@ export function WorkerDetailPage() {
) : (
{workerDocuments.map((document) => (
-
-
{document.docType}
-
- {DOCUMENT_STATUS_LABEL[document.status]}
+
+ {DOCUMENT_TYPE_LABEL[document.document_type]}
+
+ {SUBMISSION_STATUS_LABEL[document.submission_status]}
- {document.submittedAt}
+ {document.expiry_date ?? '없음'}
))}
diff --git a/src/pages/WorkerListPage/workerListData.ts b/src/pages/WorkerListPage/workerListData.ts
deleted file mode 100644
index bd9d212..0000000
--- a/src/pages/WorkerListPage/workerListData.ts
+++ /dev/null
@@ -1,409 +0,0 @@
-// TODO(backend): GET /api/workers?deadline=90d&q= -> WORKERS 대체
-// 백엔드 연동 전까지는 deadlineDays 기준으로 클라이언트에서 직접 필터링한다.
-// TODO(backend): GET /api/workers/:id -> 선택된 근로자의 currentTasks/timeline 대체
-
-export interface WorkerTask {
- /** WorkListPage/CaseDetailPage와 동일한 업무 ID 체계 (`/tasks/:caseId`로 연결) */
- caseId: string
- title: string
- detail: string
- linkTone: 'warning' | 'primary'
-}
-
-export interface WorkerTimelineEntry {
- date: string
- label: string
- highlighted: boolean
-}
-
-export interface Worker {
- id: string
- name: string
- nationality: string
- visaType: string
- employeeId: string
- phone: string
- deadlineLabel: string
- /** null이면 임박한 기한이 없어 기한 필터 값과 무관하게 항상 표시한다. */
- deadlineDays: number | null
- note: string
- currentTasks: WorkerTask[]
- timeline: WorkerTimelineEntry[]
-}
-
-export const WORKERS: Worker[] = [
- {
- id: 'W-021',
- name: '응웬반A',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-021',
- phone: '010-****-3182',
- deadlineLabel: 'D-12 체류',
- deadlineDays: 12,
- note: '진행 업무 2건',
- currentTasks: [
- { caseId: 'WI-021', title: '체류연장 준비', detail: '승인 대기 · D-12', linkTone: 'warning' },
- { caseId: 'WI-021-2', title: '여권 사본 요청', detail: '근로자 응답 대기 · 오늘', linkTone: 'primary' },
- ],
- timeline: [
- { date: '07.20', label: 'Agent가 체류연장 업무 초안 준비', highlighted: true },
- { date: '07.18', label: '외국인등록증 유효기간 확인', highlighted: false },
- { date: '07.02', label: '7월 급여명세 안내 확인', highlighted: false },
- { date: '06.14', label: '기숙사 교육 완료', highlighted: false },
- ],
- },
- {
- id: 'W-018',
- name: '쩐티B',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-018',
- phone: '010-****-2091',
- deadlineLabel: 'D-21 서류',
- deadlineDays: 21,
- note: '서류 누락 1건',
- currentTasks: [{ caseId: 'WI-018', title: '외국인등록증 사본 제출 요청', detail: '오늘 · 근로자 응답 대기', linkTone: 'warning' }],
- timeline: [{ date: '07.19', label: '서류 미제출 안내 발송', highlighted: true }],
- },
- {
- id: 'W-032',
- name: '수라즈C',
- nationality: '네팔',
- visaType: 'E-9',
- employeeId: 'F-032',
- phone: '010-****-7745',
- deadlineLabel: 'D-35 체류',
- deadlineDays: 35,
- note: '응답 대기 1건',
- currentTasks: [{ caseId: 'WI-032', title: '체류연장 안내 응답 대기', detail: '오늘 · 근로자 응답 대기', linkTone: 'warning' }],
- timeline: [{ date: '07.15', label: '체류연장 안내 발송', highlighted: true }],
- },
- {
- id: 'W-014',
- name: '아흐메드D',
- nationality: '방글라데시',
- visaType: 'E-9',
- employeeId: 'F-014',
- phone: '010-****-5510',
- deadlineLabel: 'D-62 체류',
- deadlineDays: 62,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.28', label: '입사 서류 확인 완료', highlighted: false }],
- },
- {
- id: 'W-027',
- name: '솜차이E',
- nationality: '태국',
- visaType: 'E-9',
- employeeId: 'F-027',
- phone: '010-****-6623',
- deadlineLabel: '정상',
- deadlineDays: null,
- note: '교육 일정 1건',
- currentTasks: [{ caseId: 'WI-027', title: '신규 교육 일정 확정', detail: 'D-4 · 담당자 미배정', linkTone: 'warning' }],
- timeline: [{ date: '07.10', label: '교육 일정 등록', highlighted: false }],
- },
- {
- id: 'W-041',
- name: '판반F',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-041',
- phone: '010-****-1123',
- deadlineLabel: 'D-9 서류',
- deadlineDays: 9,
- note: '서류 누락 1건',
- currentTasks: [{ caseId: 'WI-041', title: '표준근로계약서 갱신 확인', detail: '승인 대기 · D-9', linkTone: 'warning' }],
- timeline: [{ date: '07.18', label: '계약서 갱신 요청 발송', highlighted: false }],
- },
- {
- id: 'W-042',
- name: '치트라G',
- nationality: '태국',
- visaType: 'E-9',
- employeeId: 'F-042',
- phone: '010-****-4471',
- deadlineLabel: 'D-27 체류',
- deadlineDays: 27,
- note: '진행 업무 1건',
- currentTasks: [{ caseId: 'WI-042', title: '체류연장 서류 안내', detail: '근로자 응답 대기 · 오늘', linkTone: 'primary' }],
- timeline: [{ date: '07.16', label: '체류연장 안내 발송', highlighted: false }],
- },
- {
- id: 'W-043',
- name: '아민H',
- nationality: '방글라데시',
- visaType: 'E-9',
- employeeId: 'F-043',
- phone: '010-****-8820',
- deadlineLabel: '정상',
- deadlineDays: null,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '07.01', label: '입사 서류 확인 완료', highlighted: false }],
- },
- {
- id: 'W-044',
- name: '수리야I',
- nationality: '네팔',
- visaType: 'E-9',
- employeeId: 'F-044',
- phone: '010-****-2290',
- deadlineLabel: 'D-45 체류',
- deadlineDays: 45,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.30', label: '체류 상태 확인 완료', highlighted: false }],
- },
- {
- id: 'W-045',
- name: '완나J',
- nationality: '태국',
- visaType: 'E-9',
- employeeId: 'F-045',
- phone: '010-****-3345',
- deadlineLabel: 'D-58 체류',
- deadlineDays: 58,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.20', label: '건강검진 완료', highlighted: false }],
- },
- {
- id: 'W-046',
- name: '레반K',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-046',
- phone: '010-****-9012',
- deadlineLabel: 'D-33 서류',
- deadlineDays: 33,
- note: '서류 누락 1건',
- currentTasks: [{ caseId: 'WI-046', title: '건강진단서 제출 요청', detail: '오늘 · 근로자 응답 대기', linkTone: 'warning' }],
- timeline: [{ date: '07.14', label: '건강진단서 제출 요청 발송', highlighted: false }],
- },
- {
- id: 'W-047',
- name: '누르완L',
- nationality: '인도네시아',
- visaType: 'E-9',
- employeeId: 'F-047',
- phone: '010-****-6690',
- deadlineLabel: '정상',
- deadlineDays: null,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.25', label: '입사 서류 확인 완료', highlighted: false }],
- },
- {
- id: 'W-048',
- name: '위라M',
- nationality: '태국',
- visaType: 'E-9',
- employeeId: 'F-048',
- phone: '010-****-5512',
- deadlineLabel: 'D-70 체류',
- deadlineDays: 70,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.18', label: '체류 상태 확인 완료', highlighted: false }],
- },
- {
- id: 'W-049',
- name: '딴티N',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-049',
- phone: '010-****-7734',
- deadlineLabel: 'D-19 체류',
- deadlineDays: 19,
- note: '진행 업무 1건',
- currentTasks: [{ caseId: 'WI-049', title: '체류연장 준비', detail: '승인 대기 · D-19', linkTone: 'warning' }],
- timeline: [{ date: '07.17', label: 'Agent가 체류연장 업무 초안 준비', highlighted: false }],
- },
- {
- id: 'W-050',
- name: '파루크O',
- nationality: '방글라데시',
- visaType: 'E-9',
- employeeId: 'F-050',
- phone: '010-****-4423',
- deadlineLabel: 'D-52 체류',
- deadlineDays: 52,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.15', label: '체류 상태 확인 완료', highlighted: false }],
- },
- {
- id: 'W-051',
- name: '분미P',
- nationality: '태국',
- visaType: 'E-9',
- employeeId: 'F-051',
- phone: '010-****-8891',
- deadlineLabel: '정상',
- deadlineDays: null,
- note: '교육 일정 1건',
- currentTasks: [{ caseId: 'WI-051', title: '분기별 안전교육 일정 확정', detail: 'D-22 · 담당자 미배정', linkTone: 'warning' }],
- timeline: [{ date: '07.05', label: '교육 일정 등록', highlighted: false }],
- },
- {
- id: 'W-052',
- name: '도안Q',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-052',
- phone: '010-****-1156',
- deadlineLabel: 'D-24 서류',
- deadlineDays: 24,
- note: '서류 누락 1건',
- currentTasks: [{ caseId: 'WI-052', title: '외국인등록증 사본 제출 요청', detail: '오늘 · 근로자 응답 대기', linkTone: 'warning' }],
- timeline: [{ date: '07.13', label: '서류 미제출 안내 발송', highlighted: false }],
- },
- {
- id: 'W-053',
- name: '수카R',
- nationality: '인도네시아',
- visaType: 'E-9',
- employeeId: 'F-053',
- phone: '010-****-3367',
- deadlineLabel: 'D-38 체류',
- deadlineDays: 38,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.22', label: '체류 상태 확인 완료', highlighted: false }],
- },
- {
- id: 'W-054',
- name: '마야S',
- nationality: '네팔',
- visaType: 'E-9',
- employeeId: 'F-054',
- phone: '010-****-6612',
- deadlineLabel: '정상',
- deadlineDays: null,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.10', label: '입사 서류 확인 완료', highlighted: false }],
- },
- {
- id: 'W-055',
- name: '흐엉T',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-055',
- phone: '010-****-9945',
- deadlineLabel: 'D-15 체류',
- deadlineDays: 15,
- note: '진행 업무 1건',
- currentTasks: [{ caseId: 'WI-055', title: '체류연장 안내 응답 대기', detail: '오늘 · 근로자 응답 대기', linkTone: 'warning' }],
- timeline: [{ date: '07.12', label: '체류연장 안내 발송', highlighted: false }],
- },
- {
- id: 'W-056',
- name: '아난U',
- nationality: '태국',
- visaType: 'E-9',
- employeeId: 'F-056',
- phone: '010-****-2278',
- deadlineLabel: 'D-64 체류',
- deadlineDays: 64,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.08', label: '체류 상태 확인 완료', highlighted: false }],
- },
- {
- id: 'W-057',
- name: '빈랏V',
- nationality: '방글라데시',
- visaType: 'E-9',
- employeeId: 'F-057',
- phone: '010-****-5534',
- deadlineLabel: '정상',
- deadlineDays: null,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.05', label: '입사 서류 확인 완료', highlighted: false }],
- },
- {
- id: 'W-058',
- name: '리엔W',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-058',
- phone: '010-****-8867',
- deadlineLabel: 'D-41 서류',
- deadlineDays: 41,
- note: '서류 누락 1건',
- currentTasks: [{ caseId: 'WI-058', title: '건강진단서 제출 요청', detail: '오늘 · 근로자 응답 대기', linkTone: 'warning' }],
- timeline: [{ date: '07.09', label: '건강진단서 제출 요청 발송', highlighted: false }],
- },
- {
- id: 'W-059',
- name: '이만X',
- nationality: '인도네시아',
- visaType: 'E-9',
- employeeId: 'F-059',
- phone: '010-****-1189',
- deadlineLabel: 'D-73 체류',
- deadlineDays: 73,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '06.02', label: '체류 상태 확인 완료', highlighted: false }],
- },
- {
- id: 'W-060',
- name: '수반Y',
- nationality: '네팔',
- visaType: 'E-9',
- employeeId: 'F-060',
- phone: '010-****-4412',
- deadlineLabel: '정상',
- deadlineDays: null,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '05.28', label: '입사 서류 확인 완료', highlighted: false }],
- },
- {
- id: 'W-061',
- name: '남카Z',
- nationality: '태국',
- visaType: 'E-9',
- employeeId: 'F-061',
- phone: '010-****-7756',
- deadlineLabel: 'D-30 체류',
- deadlineDays: 30,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '05.25', label: '체류 상태 확인 완료', highlighted: false }],
- },
- {
- id: 'W-062',
- name: '흥타이AA',
- nationality: '베트남',
- visaType: 'E-9',
- employeeId: 'F-062',
- phone: '010-****-2245',
- deadlineLabel: 'D-8 서류',
- deadlineDays: 8,
- note: '서류 누락 1건',
- currentTasks: [{ caseId: 'WI-062', title: '외국인등록증 사본 제출 요청', detail: '오늘 · 근로자 응답 대기', linkTone: 'warning' }],
- timeline: [{ date: '07.19', label: '서류 미제출 안내 발송', highlighted: false }],
- },
- {
- id: 'W-063',
- name: '술리스탄BB',
- nationality: '인도네시아',
- visaType: 'E-9',
- employeeId: 'F-063',
- phone: '010-****-6634',
- deadlineLabel: 'D-55 체류',
- deadlineDays: 55,
- note: '진행 업무 없음',
- currentTasks: [],
- timeline: [{ date: '05.20', label: '체류 상태 확인 완료', highlighted: false }],
- },
-]
-
-export const TOTAL_WORKER_COUNT = 28
diff --git a/src/utils/documentLabels.ts b/src/utils/documentLabels.ts
new file mode 100644
index 0000000..23c0796
--- /dev/null
+++ b/src/utils/documentLabels.ts
@@ -0,0 +1,21 @@
+import type { StatusTone } from '../components/ui/StatusLabel/StatusLabel'
+import type { DocumentType, SubmissionStatus } from '../api/documents'
+
+export const DOCUMENT_TYPE_LABEL: Record
= {
+ PASSPORT_COPY: '여권 사본',
+ ARC: '외국인등록증',
+ CONTRACT: '근로계약서',
+ PERMIT: '고용허가서',
+}
+
+export const SUBMISSION_STATUS_LABEL: Record = {
+ MISSING: '미제출',
+ SUBMITTED: '확인 대기',
+ VERIFIED: '확인 완료',
+}
+
+export const SUBMISSION_STATUS_TONE: Record = {
+ MISSING: 'critical',
+ SUBMITTED: 'warning',
+ VERIFIED: 'success',
+}