- 52개 이상의 컴포넌트에 isNextRedirectError 처리 추가 - Server Action의 redirect() 에러가 catch 블록에서 삼켜지는 문제 해결 - access_token + refresh_token 모두 만료 시 정상적으로 로그인 페이지로 리다이렉트 수정된 영역: - accounting: 10개 컴포넌트 - production: 12개 컴포넌트 - hr: 5개 컴포넌트 - settings: 8개 컴포넌트 - approval: 5개 컴포넌트 - items: 20개+ 컴포넌트 - board: 5개 컴포넌트 - quality: 4개 컴포넌트 - material, outbound, quotes 등 기타 컴포넌트 Co-Authored-By: Claude <noreply@anthropic.com>
269 lines
13 KiB
TypeScript
269 lines
13 KiB
TypeScript
import type { DetailModalConfig } from '../types';
|
||
|
||
/**
|
||
* 카드/가지급금 관리 모달 설정
|
||
* cm1: 카드 사용 상세
|
||
* cm2: 가지급금 상세
|
||
* cm3: 법인세 예상 가중 상세
|
||
* cm4: 대표자 종합소득세 예상 가중 상세
|
||
*/
|
||
export function getCardManagementModalConfig(cardId: string): DetailModalConfig | null {
|
||
const configs: Record<string, DetailModalConfig> = {
|
||
cm1: {
|
||
title: '카드 사용 상세',
|
||
summaryCards: [
|
||
{ label: '당월 카드 사용', value: 30123000, unit: '원' },
|
||
{ label: '전월 대비', value: '+10.5%', isComparison: true, isPositive: true },
|
||
{ label: '미정리 건수', value: '5건' },
|
||
],
|
||
barChart: {
|
||
title: '월별 카드 사용 추이',
|
||
data: [
|
||
{ name: '7월', value: 28000000 },
|
||
{ name: '8월', value: 32000000 },
|
||
{ name: '9월', value: 27000000 },
|
||
{ name: '10월', value: 35000000 },
|
||
{ name: '11월', value: 29000000 },
|
||
{ name: '12월', value: 30123000 },
|
||
],
|
||
dataKey: 'value',
|
||
xAxisKey: 'name',
|
||
color: '#60A5FA',
|
||
},
|
||
pieChart: {
|
||
title: '사용자별 카드 사용 비율',
|
||
data: [
|
||
{ name: '대표이사', value: 15000000, percentage: 50, color: '#60A5FA' },
|
||
{ name: '경영지원팀', value: 9000000, percentage: 30, color: '#34D399' },
|
||
{ name: '영업팀', value: 6123000, percentage: 20, color: '#FBBF24' },
|
||
],
|
||
},
|
||
table: {
|
||
title: '카드 사용 내역',
|
||
columns: [
|
||
{ key: 'no', label: 'No.', align: 'center' },
|
||
{ key: 'cardName', label: '카드명', align: 'left' },
|
||
{ key: 'user', label: '사용자', align: 'center' },
|
||
{ key: 'date', label: '사용일시', align: 'center', format: 'date' },
|
||
{ key: 'store', label: '가맹점명', align: 'left' },
|
||
{ key: 'amount', label: '사용금액', align: 'right', format: 'currency' },
|
||
{ key: 'usageType', label: '사용유형', align: 'center', highlightValue: '미설정' },
|
||
],
|
||
data: [
|
||
{ cardName: '법인카드1', user: '대표이사', date: '2026-01-05 18:30', store: '스타벅스 강남점', amount: 45000, usageType: '복리후생비' },
|
||
{ cardName: '법인카드1', user: '대표이사', date: '2026-01-04 12:15', store: '한식당', amount: 350000, usageType: '접대비' },
|
||
{ cardName: '법인카드2', user: '경영지원팀', date: '2026-01-03 14:20', store: '오피스디포', amount: 125000, usageType: '소모품비' },
|
||
{ cardName: '법인카드1', user: '대표이사', date: '2026-01-02 19:45', store: '골프장', amount: 850000, usageType: '미설정' },
|
||
{ cardName: '법인카드3', user: '영업팀', date: '2026-01-02 11:30', store: 'GS칼텍스', amount: 80000, usageType: '교통비' },
|
||
{ cardName: '법인카드2', user: '경영지원팀', date: '2026-01-01 16:00', store: '이마트', amount: 230000, usageType: '미설정' },
|
||
{ cardName: '법인카드1', user: '대표이사', date: '2025-12-30 20:30', store: '백화점', amount: 1500000, usageType: '미설정' },
|
||
{ cardName: '법인카드3', user: '영업팀', date: '2025-12-29 09:15', store: '커피빈', amount: 32000, usageType: '복리후생비' },
|
||
{ cardName: '법인카드2', user: '경영지원팀', date: '2025-12-28 13:45', store: '문구점', amount: 55000, usageType: '소모품비' },
|
||
{ cardName: '법인카드1', user: '대표이사', date: '2025-12-27 21:00', store: '호텔', amount: 450000, usageType: '미설정' },
|
||
],
|
||
filters: [
|
||
{
|
||
key: 'user',
|
||
options: [
|
||
{ value: 'all', label: '전체' },
|
||
{ value: '대표이사', label: '대표이사' },
|
||
{ value: '경영지원팀', label: '경영지원팀' },
|
||
{ value: '영업팀', label: '영업팀' },
|
||
],
|
||
defaultValue: 'all',
|
||
},
|
||
{
|
||
key: 'usageType',
|
||
options: [
|
||
{ value: 'all', label: '전체' },
|
||
{ value: '미설정', label: '미설정' },
|
||
{ value: '복리후생비', label: '복리후생비' },
|
||
{ value: '접대비', label: '접대비' },
|
||
{ value: '소모품비', label: '소모품비' },
|
||
{ value: '교통비', label: '교통비' },
|
||
],
|
||
defaultValue: 'all',
|
||
},
|
||
{
|
||
key: 'sortOrder',
|
||
options: [
|
||
{ value: 'latest', label: '최신순' },
|
||
{ value: 'oldest', label: '등록순' },
|
||
{ value: 'amountDesc', label: '금액 높은순' },
|
||
{ value: 'amountAsc', label: '금액 낮은순' },
|
||
],
|
||
defaultValue: 'latest',
|
||
},
|
||
],
|
||
showTotal: true,
|
||
totalLabel: '합계',
|
||
totalValue: 30123000,
|
||
totalColumnKey: 'amount',
|
||
},
|
||
},
|
||
cm2: {
|
||
title: '가지급금 상세',
|
||
summaryCards: [
|
||
{ label: '가지급금', value: '4.5억원' },
|
||
{ label: '인정이자 4.6%', value: 6000000, unit: '원' },
|
||
{ label: '미정정', value: '10건' },
|
||
],
|
||
table: {
|
||
title: '가지급금 관련 내역',
|
||
columns: [
|
||
{ key: 'no', label: 'No.', align: 'center' },
|
||
{ key: 'date', label: '발생일시', align: 'center' },
|
||
{ key: 'target', label: '대상', align: 'center' },
|
||
{ key: 'category', label: '구분', align: 'center' },
|
||
{ key: 'amount', label: '금액', align: 'right', format: 'currency' },
|
||
{ key: 'status', label: '상태', align: 'center', highlightValue: '미정정' },
|
||
{ key: 'content', label: '내용', align: 'left' },
|
||
],
|
||
data: [
|
||
{ date: '2025-12-12 12:12', target: '홍길동', category: '카드명', amount: 1000000, status: '미정정', content: '미정정' },
|
||
{ date: '2025-12-12 12:12', target: '홍길동', category: '카드명', amount: 1000000, status: '접비(미정리)', content: '접대비 불인정' },
|
||
{ date: '2025-12-12 12:12', target: '홍길동', category: '계좌명', amount: 1000000, status: '미정정', content: '접대비 불인정' },
|
||
{ date: '2025-12-12 12:12', target: '홍길동', category: '계좌명', amount: 1000000, status: '미정정', content: '미정정' },
|
||
{ date: '2025-12-12 12:12', target: '홍길동', category: '-', amount: 1000000, status: '미정정', content: '미정정' },
|
||
{ date: '2025-12-12 12:12', target: '홍길동', category: '카드명', amount: 1000000, status: '접대비', content: '접대비 불인정' },
|
||
{ date: '2025-12-12 12:12', target: '홍길동', category: '카드명', amount: 1000000, status: '-', content: '복리후생비, 주말/심야 카드 사용' },
|
||
],
|
||
filters: [
|
||
{
|
||
key: 'target',
|
||
options: [
|
||
{ value: 'all', label: '전체' },
|
||
{ value: '홍길동', label: '홍길동' },
|
||
],
|
||
defaultValue: 'all',
|
||
},
|
||
{
|
||
key: 'category',
|
||
options: [
|
||
{ value: 'all', label: '전체' },
|
||
{ value: '카드명', label: '카드명' },
|
||
{ value: '계좌명', label: '계좌명' },
|
||
],
|
||
defaultValue: 'all',
|
||
},
|
||
{
|
||
key: 'sortOrder',
|
||
options: [
|
||
{ value: 'latest', label: '최신순' },
|
||
{ value: 'oldest', label: '등록순' },
|
||
{ value: 'amountDesc', label: '금액 높은순' },
|
||
{ value: 'amountAsc', label: '금액 낮은순' },
|
||
],
|
||
defaultValue: 'latest',
|
||
},
|
||
],
|
||
showTotal: true,
|
||
totalLabel: '합계',
|
||
totalValue: 111000000,
|
||
totalColumnKey: 'amount',
|
||
},
|
||
},
|
||
cm3: {
|
||
title: '법인세 예상 가중 상세',
|
||
summaryCards: [
|
||
{ label: '법인세 예상 증가', value: 3123000, unit: '원' },
|
||
{ label: '인정 이자', value: 6000000, unit: '원' },
|
||
{ label: '가지급금', value: '4.5억원' },
|
||
{ label: '인정이자', value: 6000000, unit: '원' },
|
||
],
|
||
comparisonSection: {
|
||
leftBox: {
|
||
title: '없을때 법인세',
|
||
items: [
|
||
{ label: '과세표준', value: '3억원' },
|
||
{ label: '법인세', value: 50970000, unit: '원' },
|
||
],
|
||
borderColor: 'orange',
|
||
},
|
||
rightBox: {
|
||
title: '있을때 법인세',
|
||
items: [
|
||
{ label: '과세표준', value: '3.06억원' },
|
||
{ label: '법인세', value: 54093000, unit: '원' },
|
||
],
|
||
borderColor: 'blue',
|
||
},
|
||
vsLabel: '법인세 예상 증가',
|
||
vsValue: 3123000,
|
||
vsSubLabel: '법인 세율 -12.5%',
|
||
},
|
||
referenceTable: {
|
||
title: '법인세 과세표준 (2024년 기준)',
|
||
columns: [
|
||
{ key: 'bracket', label: '과세표준', align: 'left' },
|
||
{ key: 'rate', label: '세율', align: 'center' },
|
||
{ key: 'formula', label: '계산식', align: 'left' },
|
||
],
|
||
data: [
|
||
{ bracket: '2억원 이하', rate: '9%', formula: '과세표준 × 9%' },
|
||
{ bracket: '2억원 초과 ~ 200억원 이하', rate: '19%', formula: '1,800만원 + (2억원 초과분 × 19%)' },
|
||
{ bracket: '200억원 초과 ~ 3,000억원 이하', rate: '21%', formula: '37.62억원 + (200억원 초과분 × 21%)' },
|
||
{ bracket: '3,000억원 초과', rate: '24%', formula: '625.62억원 + (3,000억원 초과분 × 24%)' },
|
||
],
|
||
},
|
||
},
|
||
cm4: {
|
||
title: '대표자 종합소득세 예상 가중 상세',
|
||
summaryCards: [
|
||
{ label: '대표자 종합세 예상 가중', value: 3123000, unit: '원' },
|
||
{ label: '추가 세금', value: '+12.5%', isComparison: true, isPositive: false },
|
||
{ label: '가지급금', value: '4.5억원' },
|
||
{ label: '인정이자 4.6%', value: 6000000, unit: '원' },
|
||
],
|
||
comparisonSection: {
|
||
leftBox: {
|
||
title: '가지급금 인정이자가 반영된 종합소득세',
|
||
items: [
|
||
{ label: '현재 예상 과세표준 (근로소득+상여)', value: 6000000, unit: '원' },
|
||
{ label: '현재 적용 세율', value: '19%' },
|
||
{ label: '현재 예상 세액', value: 10000000, unit: '원' },
|
||
],
|
||
borderColor: 'orange',
|
||
},
|
||
rightBox: {
|
||
title: '가지급금 인정이자가 정리된 종합소득세',
|
||
items: [
|
||
{ label: '가지급금 정리 시 예상 과세표준 (근로소득+상여)', value: 6000000, unit: '원' },
|
||
{ label: '가지급금 정리 시 적용 세율', value: '19%' },
|
||
{ label: '가지급금 정리 시 예상 세액', value: 10000000, unit: '원' },
|
||
],
|
||
borderColor: 'blue',
|
||
},
|
||
vsLabel: '종합소득세 예상 절감',
|
||
vsValue: 3123000,
|
||
vsSubLabel: '감소 세금 -12.5%',
|
||
vsBreakdown: [
|
||
{ label: '종합소득세', value: -2000000, unit: '원' },
|
||
{ label: '지방소득세', value: -200000, unit: '원' },
|
||
{ label: '4대 보험', value: -1000000, unit: '원' },
|
||
],
|
||
},
|
||
referenceTable: {
|
||
title: '종합소득세 과세표준 (2024년 기준)',
|
||
columns: [
|
||
{ key: 'bracket', label: '과세표준', align: 'left' },
|
||
{ key: 'rate', label: '세율', align: 'center' },
|
||
{ key: 'deduction', label: '누진공제', align: 'right' },
|
||
{ key: 'formula', label: '계산식', align: 'left' },
|
||
],
|
||
data: [
|
||
{ bracket: '1,400만원 이하', rate: '6%', deduction: '-', formula: '과세표준 × 6%' },
|
||
{ bracket: '1,400만원 초과 ~ 5,000만원 이하', rate: '15%', deduction: '126만원', formula: '과세표준 × 15% - 126만원' },
|
||
{ bracket: '5,000만원 초과 ~ 8,800만원 이하', rate: '24%', deduction: '576만원', formula: '과세표준 × 24% - 576만원' },
|
||
{ bracket: '8,800만원 초과 ~ 1.5억원 이하', rate: '35%', deduction: '1,544만원', formula: '과세표준 × 35% - 1,544만원' },
|
||
{ bracket: '1.5억원 초과 ~ 3억원 이하', rate: '38%', deduction: '1,994만원', formula: '과세표준 × 38% - 1,994만원' },
|
||
{ bracket: '3억원 초과 ~ 5억원 이하', rate: '40%', deduction: '2,594만원', formula: '과세표준 × 40% - 2,594만원' },
|
||
{ bracket: '5억원 초과 ~ 10억원 이하', rate: '42%', deduction: '3,594만원', formula: '과세표준 × 42% - 3,594만원' },
|
||
{ bracket: '10억원 초과', rate: '45%', deduction: '6,594만원', formula: '과세표준 × 45% - 6,594만원' },
|
||
],
|
||
},
|
||
},
|
||
};
|
||
|
||
return configs[cardId] || null;
|
||
} |