f176b9702c
신규 페이지 (모두 ProTable / ProCard 패턴): - org/OrgTree: 조직 트리 + 선택 시 우측에 소속 설계사 ProTable - product/CompanyList: 보험사 목록 - product/ProductList: 상품 목록 (보험종 필터) - rule/CommissionRateList: 수수료율 (보험사 통보) - rule/PayoutRuleList: 지급율 (직급 × 보험종 × 회차) - rule/OverrideRuleList: 오버라이드 규정 (직급 페어) - rule/ChargebackRuleList: 환수 규정 (실효 월수 구간) - rule/ExceptionCodeList: 예외 코드 마스터 - ledger/MaintainLedger: 유지수수료 원장 - receive/ReceiveData: 보험사 raw 수신 데이터 - receive/ReceiveMapping: 보험사 프로파일 + 필드 매핑 규칙 - system/MenuManage: 메뉴 트리 표시 (Tree) - system/SystemConfig: 키-값 설정 (그룹별 필터) - system/SystemLog: 로그인/API/변경 이력 3 탭 신규 API 모듈: - api/org.ts (조직 트리) - api/company.ts, api/product.ts - api/rule.ts (5종 통합) - api/receive.ts (profile/field/raw/error) - api/config.ts, api/log.ts App.tsx: 14 라우트 추가 (org/tree, companies, products, rules/*, receive/*, ledger/maintain, system/menus, system/config, system/logs) 검증: - tsc -b 통과 - 12개 백엔드 엔드포인트 200 OK 확인 - dev 서버 HMR 자동 반영 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
import api, { unwrap } from './request';
|
|
|
|
export interface CommissionRateResp {
|
|
rateId: number;
|
|
productId: number;
|
|
productName?: string;
|
|
commissionYear: number;
|
|
ratePct: number;
|
|
payMethodCond?: string;
|
|
minPremium?: number;
|
|
effectiveFrom?: string;
|
|
effectiveTo?: string;
|
|
version: number;
|
|
}
|
|
|
|
export interface PayoutRuleResp {
|
|
ruleId: number;
|
|
gradeId: number;
|
|
gradeName?: string;
|
|
insuranceType: string;
|
|
commissionYear: number;
|
|
payoutPct: number;
|
|
payMethodCond?: string;
|
|
performanceGrade?: string;
|
|
effectiveFrom?: string;
|
|
effectiveTo?: string;
|
|
version: number;
|
|
}
|
|
|
|
export interface OverrideRuleResp {
|
|
overrideId: number;
|
|
fromGrade: number;
|
|
toGrade: number;
|
|
fromGradeName?: string;
|
|
toGradeName?: string;
|
|
overridePct: number;
|
|
calcType?: string;
|
|
insuranceTypeCond?: string;
|
|
capAmount?: number;
|
|
effectiveFrom?: string;
|
|
effectiveTo?: string;
|
|
}
|
|
|
|
export interface ChargebackRuleResp {
|
|
cbRuleId: number;
|
|
companyCode: string;
|
|
insuranceType: string;
|
|
lapseMonthFrom: number;
|
|
lapseMonthTo: number;
|
|
cbRate: number;
|
|
includeOverride: string;
|
|
installmentAllowed: string;
|
|
maxInstallments?: number;
|
|
effectiveFrom?: string;
|
|
effectiveTo?: string;
|
|
}
|
|
|
|
export interface ExceptionCodeResp {
|
|
exceptionCode: string;
|
|
exceptionName: string;
|
|
category?: string;
|
|
direction: string;
|
|
autoCalcYn: string;
|
|
approvalRequired: string;
|
|
taxIncluded: string;
|
|
description?: string;
|
|
isActive: string;
|
|
}
|
|
|
|
export const ruleApi = {
|
|
commissionRates: (params?: { productId?: number; year?: number }) =>
|
|
unwrap<CommissionRateResp[]>(api.get('/api/rules/commission-rates', { params })),
|
|
payoutRules: (params?: { gradeId?: number; insuranceType?: string }) =>
|
|
unwrap<PayoutRuleResp[]>(api.get('/api/rules/payout', { params })),
|
|
overrideRules: () => unwrap<OverrideRuleResp[]>(api.get('/api/rules/override')),
|
|
chargebackRules: (params?: { companyCode?: string }) =>
|
|
unwrap<ChargebackRuleResp[]>(api.get('/api/rules/chargeback', { params })),
|
|
exceptionCodes: () => unwrap<ExceptionCodeResp[]>(api.get('/api/rules/exception-codes')),
|
|
};
|