feat: CEO 대시보드 API 구현 및 DB 컬럼 오류 수정

- StatusBoardService: 현황판 8개 항목 집계 API
- CalendarService: 캘린더 일정 조회 API (작업지시/계약/휴가)
- TodayIssueService: 오늘의 이슈 리스트 API
- VatService: 부가세 신고 현황 API
- EntertainmentService: 접대비 현황 API
- WelfareService: 복리후생 현황 API

버그 수정:
- orders 테이블 status → status_code 컬럼명 수정
- users 테이블 department 관계 → tenantProfile.department로 수정
- Swagger 문서 및 라우트 추가
This commit is contained in:
2026-01-21 10:25:18 +09:00
parent 637ebe2e7f
commit f7850e43a7
20 changed files with 2712 additions and 0 deletions

View File

@@ -481,4 +481,64 @@
'status_updated' => '입찰 상태가 변경되었습니다.',
'converted' => '견적이 입찰로 변환되었습니다.',
],
// CEO 대시보드 현황판
'status_board' => [
'orders' => '수주',
'bad_debts' => '채권 추심',
'safety_stock' => '안전 재고',
'tax_deadline' => '세금 신고',
'tax_d_day' => '부가세 신고 D-:days',
'tax_overdue' => '부가세 신고 :days일 초과',
'new_clients' => '신규 업체 등록',
'leaves' => '연차',
'purchases' => '발주',
'approvals' => '결재 요청',
],
// CEO 대시보드 오늘의 이슈 리스트
'today_issue' => [
'unknown_client' => '미확인 거래처',
'unknown_item' => '미확인 품목',
'unknown_user' => '미확인 사용자',
'expense_item' => '품의서',
'approval_request' => '결재 요청',
// 이슈 내용 메시지
'order_success' => ':client 신규 수주 :amount원 확정',
'receivable_overdue' => ':client 미수금 :amount원 연체 :days일',
'stock_below_safety' => ':item 재고 부족 경고',
'expense_pending_multiple' => ':title 외 :count건 (:amount원)',
'expense_pending_single' => ':title (:amount원)',
'tax_vat_deadline' => ':quarter분기 부가세 신고 D-:days',
'approval_pending' => ':title 승인 요청 (:drafter)',
'new_client' => '신규 거래처 :name 등록 완료',
// 상대 시간
'time_minutes_ago' => ':minutes분 전',
'time_hours_ago' => ':hours시간 전',
'time_yesterday' => '어제',
'time_days_ago' => ':days일 전',
],
// CEO 대시보드 캘린더
'calendar' => [
'leave_title' => ':name 휴가',
'leave_default' => '휴가',
],
// CEO 대시보드 부가세 현황
'vat' => [
'sales_tax' => '매출세액',
'purchases_tax' => '매입세액',
'estimated_payment' => '예상 납부세액',
'unissued_invoices' => '세금계산서 미발행',
'refund' => '환급',
'payment' => '납부',
'period_quarter' => ':year년 :period기 예정신고',
'period_half' => ':year년 :half 확정신고',
'period_year' => ':year년 연간',
'first_half' => '상반기',
'second_half' => '하반기',
],
];