- 완료된 계획 문서 12개 → plans/archive/ 이동 - 완료된 하위 계획 2개 → plans/sub/archive/ 이동 - 새 계획 문서 추가: - 5130-bom-migration-plan.md (완료) - 5130-sam-data-migration-plan.md (완료) - bidding-api-implementation-plan.md (완료) - dashboard-api-integration-plan.md - order-workorder-shipment-integration-plan.md - dev-toolbar-plan.md - AI 리포트 키워드 색상체계 가이드 v1.4 추가 - index_plans.md 업데이트
578 lines
18 KiB
Markdown
578 lines
18 KiB
Markdown
# Dashboard API 연동 개발 계획
|
||
|
||
> **작성일**: 2026-01-20
|
||
> **목적**: CEO Dashboard 페이지의 목업 데이터 → 실제 API 연동
|
||
> **Serena ID**: dashboard-api-state
|
||
|
||
---
|
||
|
||
## 📍 현재 상태 요약
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 전체 진행률: 45% (5/11 섹션 완료) │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ ✅ Phase 1 완료 - 기존 API 연동 (프론트엔드) │
|
||
│ ⏳ Phase 2 대기 - 신규 API 개발 필요 (백엔드) │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
| 구분 | 섹션 | 데이터 소스 | 상태 |
|
||
|:---:|------|:----------:|:----:|
|
||
| Phase 1 | 일일 일보 (DailyReport) | API | ✅ |
|
||
| Phase 1 | 미수금 현황 (Receivable) | API | ✅ |
|
||
| Phase 1 | 채권추심 현황 (DebtCollection) | API | ✅ |
|
||
| Phase 1 | 당월 예상 지출 (MonthlyExpense) | API | ✅ |
|
||
| Phase 1 | 카드/가지급금 관리 (CardManagement) | API | ✅ |
|
||
| **Phase 2** | **오늘의 이슈 (TodayIssue)** | mockData | ⏳ |
|
||
| **Phase 2** | **현황판 (StatusBoard)** | mockData | ⏳ |
|
||
| **Phase 2** | **접대비 현황 (Entertainment)** | mockData | ⏳ |
|
||
| **Phase 2** | **복리후생비 현황 (Welfare)** | mockData | ⏳ |
|
||
| **Phase 2** | **부가세 현황 (Vat)** | mockData | ⏳ |
|
||
| **Phase 2** | **캘린더 (Calendar)** | mockData | ⏳ |
|
||
|
||
---
|
||
|
||
## Phase 1 완료 내역
|
||
|
||
### 생성된 파일
|
||
|
||
| 파일 | 설명 |
|
||
|------|------|
|
||
| `react/src/lib/api/dashboard/types.ts` | API 응답 타입 정의 (5개 엔드포인트) |
|
||
| `react/src/lib/api/dashboard/transformers.ts` | API → Frontend 변환 함수 + CheckPoint 생성 |
|
||
| `react/src/hooks/useCEODashboard.ts` | 통합 Dashboard Hook (병렬 API 호출) |
|
||
| `react/src/lib/api/dashboard/index.ts` | 모듈 export |
|
||
|
||
### 수정된 파일
|
||
|
||
| 파일 | 변경 내용 |
|
||
|------|----------|
|
||
| `CEODashboard.tsx` | `useCEODashboard` Hook 연동, mockData fallback 패턴 |
|
||
|
||
### 연동된 API 엔드포인트
|
||
|
||
| 섹션 | 프론트 호출 경로 | 백엔드 실제 경로 |
|
||
|------|-----------------|-----------------|
|
||
| DailyReport | `/api/proxy/daily-report/summary` | `DailyReportService::summary()` |
|
||
| Receivable | `/api/proxy/receivables/summary` | `ReceivablesService::summary()` |
|
||
| DebtCollection | `/api/proxy/bad-debts/summary` | `BadDebtService::summary()` |
|
||
| MonthlyExpense | `/api/proxy/expected-expenses/summary` | `ExpectedExpenseService::summary()` |
|
||
| CardManagement | `/api/proxy/card-transactions/summary` | `CardTransactionService::summary()` |
|
||
|
||
### API 불일치 사항 (fallback 처리)
|
||
|
||
| 섹션 | 이슈 | 처리 방식 |
|
||
|------|------|----------|
|
||
| MonthlyExpense | `by_transaction_type` 필드로 제공 | purchase/card/bill 키로 분류 |
|
||
| CardManagement | 가지급금, 법인세 예상 가중 등 미제공 | mockData fallback 사용 |
|
||
|
||
---
|
||
|
||
## Phase 2 개발 계획 (신규 API 필요)
|
||
|
||
### 2.1 오늘의 이슈 (TodayIssue)
|
||
|
||
#### 기능 설명
|
||
|
||
대시보드 상단에 표시되는 실시간 이벤트 목록. 각 이벤트는 뱃지, 내용, 시간, 관련 페이지 링크로 구성.
|
||
|
||
#### 현재 mockData 구조
|
||
|
||
```
|
||
todayIssueList: [
|
||
{
|
||
id: string,
|
||
badge: string, // "수주 성공", "주식 이슈", "직정 제고", "세금 신고", "결재 요청", "기타"
|
||
content: string, // "A전자 신규 수주 450,000,000원 확정"
|
||
time: string, // "10분 전", "1시간 전", "어제"
|
||
date: string, // "2026-01-16"
|
||
needsApproval: boolean, // 결재 필요 여부
|
||
path: string // 관련 페이지 경로
|
||
}
|
||
]
|
||
```
|
||
|
||
#### 개발 방향 제안
|
||
|
||
**방향 A: 통합 이벤트 테이블 신규 생성**
|
||
|
||
| 장점 | 단점 |
|
||
|------|------|
|
||
| 단일 API로 모든 이슈 조회 가능 | 신규 테이블 설계 필요 |
|
||
| 이벤트 타입별 필터링 용이 | 각 도메인에서 이벤트 생성 로직 추가 필요 |
|
||
| 확장성 좋음 | 실시간성 유지를 위한 트리거/큐 필요 |
|
||
|
||
```
|
||
테이블: dashboard_events
|
||
- id, tenant_id
|
||
- event_type: enum (order, receivable, stock, tax, approval, etc.)
|
||
- badge: string
|
||
- content: string
|
||
- metadata: json (금액, 거래처명 등)
|
||
- related_path: string
|
||
- needs_approval: boolean
|
||
- created_at
|
||
```
|
||
|
||
**방향 B: 각 도메인 API 조합 (Aggregation)**
|
||
|
||
| 장점 | 단점 |
|
||
|------|------|
|
||
| 기존 API 재활용 | 여러 API 호출 필요 (성능) |
|
||
| 신규 테이블 불필요 | 프론트에서 데이터 병합 로직 필요 |
|
||
| 도메인별 독립성 유지 | 일관된 포맷 변환 필요 |
|
||
|
||
```
|
||
호출할 API 목록:
|
||
- /orders/recent-events (수주)
|
||
- /receivables/overdue-alerts (미수금 연체)
|
||
- /stock/low-alerts (재고 부족)
|
||
- /tax/deadlines (세금 신고 기한)
|
||
- /approvals/pending (결재 대기)
|
||
```
|
||
|
||
**방향 C: 이벤트 큐 기반 실시간 시스템**
|
||
|
||
| 장점 | 단점 |
|
||
|------|------|
|
||
| 실시간 푸시 가능 | 인프라 복잡도 증가 |
|
||
| 확장성 최고 | Redis/Queue 추가 필요 |
|
||
| 알림 시스템과 통합 가능 | 개발 공수 큼 |
|
||
|
||
#### 데이터 소스 후보
|
||
|
||
| 뱃지 | 데이터 소스 | 조건 |
|
||
|------|------------|------|
|
||
| 수주 성공 | `orders` 테이블 | status = 'confirmed', 최근 N일 |
|
||
| 주식 이슈 (미수금) | `receivables` 테이블 | overdue_days > 0 |
|
||
| 직정 제고 (재고) | `stock_items` 테이블 | quantity < safety_stock |
|
||
| 세금 신고 | `tax_schedules` 테이블 | deadline 임박 |
|
||
| 결재 요청 | `approvals` 테이블 | status = 'pending' |
|
||
| 지출예상내역서 | `expense_requests` 테이블 | status = 'pending' |
|
||
|
||
#### 권장 사항
|
||
|
||
- **MVP**: 방향 B (기존 API 조합)로 시작
|
||
- **확장**: 추후 방향 A로 마이그레이션 고려
|
||
|
||
---
|
||
|
||
### 2.2 현황판 (StatusBoard)
|
||
|
||
#### 기능 설명
|
||
|
||
각 업무 영역별 미처리 건수를 카드 형태로 표시. 클릭 시 해당 페이지로 이동.
|
||
|
||
#### 현재 mockData 구조
|
||
|
||
```
|
||
todayIssue: [
|
||
{
|
||
id: string,
|
||
label: string, // "수주", "채권 추심", "안전 재고" 등
|
||
count: number|string, // 3 또는 "부가세 신고 D-15"
|
||
path: string, // 이동할 페이지 경로
|
||
isHighlighted: boolean // 강조 표시 여부
|
||
}
|
||
]
|
||
```
|
||
|
||
#### 개발 방향 제안
|
||
|
||
**방향 A: 단일 집계 API**
|
||
|
||
```
|
||
GET /api/dashboard/status-board
|
||
|
||
응답:
|
||
{
|
||
items: [
|
||
{ key: "orders", label: "수주", count: 3, path: "/sales/order-management-sales" },
|
||
{ key: "debt_collection", label: "채권 추심", count: 3, path: "/accounting/bad-debt-collection" },
|
||
{ key: "safety_stock", label: "안전 재고", count: 3, path: "/material/stock-status", isHighlighted: true },
|
||
{ key: "tax_report", label: "세금 신고", count: "부가세 신고 D-15", path: "/accounting/tax" },
|
||
...
|
||
]
|
||
}
|
||
```
|
||
|
||
| 장점 | 단점 |
|
||
|------|------|
|
||
| 단일 API 호출 | 백엔드에서 여러 테이블 집계 필요 |
|
||
| 프론트 로직 단순 | 새 항목 추가 시 백엔드 수정 필요 |
|
||
|
||
**방향 B: 설정 기반 동적 집계**
|
||
|
||
```
|
||
1. dashboard_status_items 테이블에 항목 정의
|
||
2. 각 항목별 count_query (SQL 또는 서비스 메서드) 지정
|
||
3. API에서 동적으로 집계하여 반환
|
||
```
|
||
|
||
| 장점 | 단점 |
|
||
|------|------|
|
||
| 관리자가 항목 추가/수정 가능 | 구현 복잡도 증가 |
|
||
| 유연성 높음 | 쿼리 성능 관리 필요 |
|
||
|
||
#### 집계 대상 테이블
|
||
|
||
| 항목 | 테이블 | 집계 조건 |
|
||
|------|--------|----------|
|
||
| 수주 | `orders` | status = 'pending' AND tenant_id |
|
||
| 채권 추심 | `bad_debts` | status IN ('collecting', 'legal_action') |
|
||
| 안전 재고 | `stock_items` | quantity < safety_stock |
|
||
| 세금 신고 | `tax_schedules` | D-day 계산 |
|
||
| 신규 업체 등록 | `vendors` | status = 'pending_approval' |
|
||
| 연차 | `vacation_requests` | status = 'pending' |
|
||
| 발주 | `purchase_orders` | status = 'pending' |
|
||
| 결재 요청 | `approvals` | status = 'pending' |
|
||
|
||
#### 권장 사항
|
||
|
||
- 방향 A로 시작 (단일 집계 API)
|
||
- 항목은 하드코딩으로 시작, 추후 설정 테이블로 분리 가능
|
||
|
||
---
|
||
|
||
### 2.3 접대비 현황 (Entertainment)
|
||
|
||
#### 기능 설명
|
||
|
||
세무 규정에 따른 접대비 한도 및 사용 현황. 분기별 한도 관리 필요.
|
||
|
||
#### 현재 mockData 구조
|
||
|
||
```
|
||
entertainment: {
|
||
cards: [
|
||
{ label: "매출", amount: 30530000000 },
|
||
{ label: "{1사분기} 접대비 총 한도", amount: 40123000 },
|
||
{ label: "{1사분기} 접대비 잔여한도", amount: 30123000 },
|
||
{ label: "{1사분기} 접대비 사용금액", amount: 10000000 }
|
||
],
|
||
checkPoints: [...] // AI 분석 메시지
|
||
}
|
||
```
|
||
|
||
#### 세무 규정 (접대비 한도 계산)
|
||
|
||
```
|
||
기본 한도: 3,600만원 (중소기업 기준)
|
||
매출 추가 한도:
|
||
- 100억 이하: 매출 × 0.3%
|
||
- 100~500억: 100억 초과분 × 0.2%
|
||
- 500억 초과: 500억 초과분 × 0.03%
|
||
|
||
분기별 한도 = 연간 한도 ÷ 4
|
||
```
|
||
|
||
#### 개발 방향 제안
|
||
|
||
**방향 A: 전용 서비스 클래스**
|
||
|
||
```
|
||
EntertainmentExpenseService
|
||
├── getQuarterlyLimit(year, quarter) // 분기별 한도 계산
|
||
├── getUsedAmount(year, quarter) // 분기별 사용액 집계
|
||
├── getRemainingLimit(year, quarter) // 잔여 한도
|
||
├── getSummary() // 대시보드용 요약
|
||
└── generateCheckPoints() // AI 분석 메시지 생성
|
||
```
|
||
|
||
**방향 B: 기존 회계 시스템 확장**
|
||
|
||
- `expenses` 테이블에서 접대비 계정 필터링
|
||
- 한도 계산 로직만 별도 서비스로 분리
|
||
|
||
#### 필요 데이터
|
||
|
||
| 데이터 | 소스 | 비고 |
|
||
|--------|------|------|
|
||
| 연간 매출 | `orders` 또는 `sales_summary` | 한도 계산용 |
|
||
| 접대비 사용액 | `expenses` | account_code = '접대비' |
|
||
| 거래처 정보 | `expense_details` | 접대비 증빙용 |
|
||
|
||
#### CheckPoint 생성 규칙
|
||
|
||
| 상황 | 타입 | 메시지 예시 |
|
||
|------|------|------------|
|
||
| 한도 85% 미만 | info | "여유 있게 운영 중입니다" |
|
||
| 한도 85~100% | warning | "잔여 한도 600만원입니다. 점검 필요" |
|
||
| 한도 초과 | error | "초과분은 손금불산입됩니다" |
|
||
| 거래처 정보 누락 | error | "3건의 거래처 정보가 누락되었습니다" |
|
||
|
||
---
|
||
|
||
### 2.4 복리후생비 현황 (Welfare)
|
||
|
||
#### 기능 설명
|
||
|
||
복리후생비 한도 및 사용 현황. 직원 수 기반 한도 계산.
|
||
|
||
#### 현재 mockData 구조
|
||
|
||
```
|
||
welfare: {
|
||
cards: [
|
||
{ label: "당해년도 복리후생비 한도", amount: 30123000 },
|
||
{ label: "{1사분기} 복리후생비 총 한도", amount: 10123000 },
|
||
{ label: "{1사분기} 복리후생비 잔여한도", amount: 5123000 },
|
||
{ label: "{1사분기} 복리후생비 사용금액", amount: 5123000 }
|
||
],
|
||
checkPoints: [...]
|
||
}
|
||
```
|
||
|
||
#### 한도 계산 방식 옵션
|
||
|
||
**방식 1: 고정 금액 기준**
|
||
- 설정된 연간 한도를 분기별로 분배
|
||
- 예: 연간 3,000만원 → 분기당 750만원
|
||
|
||
**방식 2: 직원 수 기준 (비율)**
|
||
- 직원 1인당 월 N만원 기준
|
||
- 예: 50명 × 20만원 × 3개월 = 3,000만원/분기
|
||
|
||
#### 개발 방향 제안
|
||
|
||
```
|
||
WelfareExpenseService
|
||
├── getAnnualLimit() // 연간 한도 (설정값 또는 계산)
|
||
├── getQuarterlyLimit(quarter) // 분기별 한도
|
||
├── getUsedAmount(quarter) // 분기별 사용액
|
||
├── getPerEmployeeAverage() // 1인당 평균 사용액
|
||
├── getSummary() // 대시보드용 요약
|
||
└── generateCheckPoints() // AI 분석 메시지
|
||
```
|
||
|
||
#### 필요 데이터
|
||
|
||
| 데이터 | 소스 | 비고 |
|
||
|--------|------|------|
|
||
| 직원 수 | `employees` | active 상태 |
|
||
| 복리후생비 사용액 | `expenses` | account_code = '복리후생비' |
|
||
| 한도 설정 | `company_settings` | 연간 한도 또는 1인당 기준 |
|
||
|
||
#### CheckPoint 생성 규칙
|
||
|
||
| 상황 | 타입 | 메시지 예시 |
|
||
|------|------|------------|
|
||
| 1인당 업계 평균 이내 | success | "업계 평균(15~25만원) 내 정상 운영 중" |
|
||
| 식대 비과세 한도 초과 | error | "식대가 월 25만원으로 비과세 한도(20만원) 초과" |
|
||
| 분기 한도 85% 이상 | warning | "한도 소진 임박" |
|
||
|
||
---
|
||
|
||
### 2.5 부가세 현황 (Vat)
|
||
|
||
#### 기능 설명
|
||
|
||
부가세 신고 예상 금액 및 관련 이슈 표시.
|
||
|
||
#### 현재 mockData 구조
|
||
|
||
```
|
||
vat: {
|
||
cards: [
|
||
{ label: "매출세액", amount: 3050000000 },
|
||
{ label: "매입세액", amount: 2050000000 },
|
||
{ label: "예상 납부세액", amount: 110000000 },
|
||
{ label: "세금계산서 미발행", amount: 3, unit: "건" }
|
||
],
|
||
checkPoints: [...]
|
||
}
|
||
```
|
||
|
||
#### 개발 방향 제안
|
||
|
||
**방향 A: 전용 부가세 서비스**
|
||
|
||
```
|
||
VatService
|
||
├── getSalesTax(period) // 매출세액 집계
|
||
├── getPurchaseTax(period) // 매입세액 집계
|
||
├── getEstimatedPayment(period)// 예상 납부/환급세액
|
||
├── getUnissuedInvoices() // 미발행 세금계산서
|
||
├── getSummary() // 대시보드용 요약
|
||
└── generateCheckPoints() // AI 분석 메시지
|
||
```
|
||
|
||
**방향 B: 기존 세금계산서 시스템 확장**
|
||
|
||
- 발행/수취 세금계산서에서 세액 집계
|
||
- 미발행 건수 조회 추가
|
||
|
||
#### 필요 데이터
|
||
|
||
| 데이터 | 소스 | 비고 |
|
||
|--------|------|------|
|
||
| 매출세액 | `tax_invoices` (발행) | type = 'sales', 합계 × 10% |
|
||
| 매입세액 | `tax_invoices` (수취) | type = 'purchase', 합계 × 10% |
|
||
| 미발행 건 | `orders` 또는 `sales` | 세금계산서 미연결 건 |
|
||
|
||
#### CheckPoint 생성 규칙
|
||
|
||
| 상황 | 타입 | 메시지 예시 |
|
||
|------|------|------------|
|
||
| 환급 예상 | success | "예상 환급세액 520만원" |
|
||
| 납부 예상 (전기 대비 증가) | info | "전기 대비 12.9% 증가" |
|
||
| 미발행 세금계산서 존재 | warning | "3건 미발행, 발행 필요" |
|
||
| 신고 기한 임박 | error | "신고 기한 D-3" |
|
||
|
||
#### 부가세 신고 기간
|
||
|
||
| 신고 유형 | 과세 기간 | 신고 기한 |
|
||
|----------|----------|----------|
|
||
| 1기 예정 | 1/1 ~ 3/31 | 4/25 |
|
||
| 1기 확정 | 1/1 ~ 6/30 | 7/25 |
|
||
| 2기 예정 | 7/1 ~ 9/30 | 10/25 |
|
||
| 2기 확정 | 7/1 ~ 12/31 | 다음해 1/25 |
|
||
|
||
---
|
||
|
||
### 2.6 캘린더 (Calendar)
|
||
|
||
#### 기능 설명
|
||
|
||
회사 일정 표시 및 관리. 부서별, 개인별 일정 지원.
|
||
|
||
#### 현재 mockData 구조
|
||
|
||
```
|
||
calendarSchedules: [
|
||
{
|
||
id: string,
|
||
title: string,
|
||
startDate: string, // "2026-01-01"
|
||
endDate: string, // "2026-01-04"
|
||
startTime?: string, // "09:00"
|
||
endTime?: string, // "12:00"
|
||
type: string, // "schedule", "order", "construction"
|
||
department?: string, // 부서명
|
||
personName?: string // 담당자명
|
||
}
|
||
]
|
||
```
|
||
|
||
#### 개발 방향 제안
|
||
|
||
**방향 A: 전용 일정 테이블**
|
||
|
||
```
|
||
테이블: calendar_schedules
|
||
- id, tenant_id
|
||
- title
|
||
- start_date, end_date
|
||
- start_time, end_time (nullable, 종일 여부)
|
||
- type: enum (schedule, order, construction, vacation, tax, etc.)
|
||
- department_id (nullable)
|
||
- user_id (nullable, 담당자)
|
||
- color (nullable)
|
||
- content (nullable, 상세 내용)
|
||
- created_by, created_at, updated_at
|
||
```
|
||
|
||
**방향 B: 기존 데이터 연동 (읽기 전용)**
|
||
|
||
각 도메인의 기존 데이터를 캘린더 형식으로 변환
|
||
|
||
| 타입 | 소스 테이블 | 변환 규칙 |
|
||
|------|------------|----------|
|
||
| 수주 납기 | `orders` | due_date → startDate |
|
||
| 공사 일정 | `constructions` | start_date, end_date |
|
||
| 세금 신고 | `tax_schedules` | deadline → startDate |
|
||
| 휴가 | `vacation_requests` | start_date, end_date |
|
||
|
||
**방향 C: 하이브리드 (A + B)**
|
||
|
||
- 직접 등록 일정: 전용 테이블
|
||
- 시스템 일정: 각 도메인에서 자동 생성
|
||
- 통합 API에서 병합하여 제공
|
||
|
||
#### API 설계
|
||
|
||
```
|
||
GET /api/calendar/schedules?year=2026&month=1
|
||
POST /api/calendar/schedules (일정 생성)
|
||
PUT /api/calendar/schedules/{id} (일정 수정)
|
||
DELETE /api/calendar/schedules/{id} (일정 삭제)
|
||
```
|
||
|
||
#### 권장 사항
|
||
|
||
- **MVP**: 방향 A (전용 테이블)로 CRUD 구현
|
||
- **확장**: 추후 방향 C로 시스템 일정 연동
|
||
|
||
---
|
||
|
||
## 개발 우선순위 제안
|
||
|
||
| 순위 | 섹션 | 이유 |
|
||
|:---:|------|------|
|
||
| 1 | **현황판 (StatusBoard)** | 기존 데이터 집계만으로 구현 가능, 공수 적음 |
|
||
| 2 | **캘린더 (Calendar)** | 독립적인 CRUD, 다른 섹션과 의존성 없음 |
|
||
| 3 | **오늘의 이슈 (TodayIssue)** | StatusBoard 로직 재활용 가능 |
|
||
| 4 | **부가세 현황 (Vat)** | 세금계산서 데이터 기반, 로직 명확 |
|
||
| 5 | **접대비 현황 (Entertainment)** | 세무 로직 포함, 한도 계산 복잡 |
|
||
| 6 | **복리후생비 현황 (Welfare)** | 접대비와 유사한 패턴, 함께 개발 권장 |
|
||
|
||
---
|
||
|
||
## 공통 개발 패턴
|
||
|
||
### API 응답 형식
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"cards": [...],
|
||
"checkPoints": [...]
|
||
},
|
||
"message": null
|
||
}
|
||
```
|
||
|
||
### CheckPoint 구조
|
||
|
||
```json
|
||
{
|
||
"id": "unique-id",
|
||
"type": "error|warning|success|info",
|
||
"message": "메시지 내용",
|
||
"highlights": [
|
||
{ "text": "강조할 텍스트", "color": "red|green|blue" }
|
||
]
|
||
}
|
||
```
|
||
|
||
### 색상 체계 (AI 리포트)
|
||
|
||
| 색상 | 의미 | 적용 기준 |
|
||
|:---:|:---:|----------|
|
||
| 🔴 error | 경고 | 한도 초과, 즉각 조치 필요 |
|
||
| 🟠 warning | 주의 | 한도 85~100%, 기한 임박 |
|
||
| 🟢 success | 긍정 | 목표 달성, 입금/회수 발생 |
|
||
| 🔵 info | 양호 | 정상 범위, 안정적 |
|
||
|
||
---
|
||
|
||
## 참고 문서
|
||
|
||
| 문서 | 경로 |
|
||
|------|------|
|
||
| AI 리포트 색상 체계 | `docs/plans/AI_리포트_키워드_색상체계_가이드_v1.4.md` |
|
||
| Hook 패턴 예제 | `react/src/hooks/useClientList.ts` |
|
||
| Transform 예제 | `react/src/lib/api/dashboard/transformers.ts` |
|
||
| Proxy 라우트 | `react/src/app/api/proxy/[...path]/route.ts` |
|
||
|
||
---
|
||
|
||
## 변경 이력
|
||
|
||
| 날짜 | 내용 |
|
||
|------|------|
|
||
| 2026-01-20 | 초기 분석 문서 작성 |
|
||
| 2026-01-20 | Phase 1 완료 (5개 섹션 API 연동) |
|
||
| 2026-01-20 | Phase 2 개발 계획 상세화: 각 섹션별 개발 방향, 데이터 소스, 권장 사항 추가 | |