Files
ga-commission-system/ga-frontend/src/api/contract.ts
T
GA Pro 17ab1098ec feat: 1200%룰 이연 분급 도래월 지급(PayInstallmentStep) + 코드베이스 신입교육 주석
PayInstallmentStep(Step 4.5): 1200%룰로 이연된 분급(installment_plan SCHEDULED)을
도래월(settle_month=정산월)에 recruit_ledger로 편입해 실제 지급. 이전엔 이연만 되고
도래월 지급 절차가 없어 차액이 영구 미지급되던 갭을 메움.
- BatchConfig job flow에 step4b(calcRecruit→payInstallment→calcMaintain) 등록
- InstallmentPlanMapper.resetPaidToScheduledByMonth(+XML)로 재실행 멱등
  (진입 시 PAID→SCHEDULED 역산, Step4 deleteBySettleMonth가 원장 정리)
- RecruitLedgerMapper insert에 reconcile_status 컬럼, SettlementContext.installmentPaidCount
- 단위테스트 3건(정상지급/멱등/계약미존재) GREEN

신입교육 주석: 컨트롤러/서비스/공통/프론트 전반에 도메인·코드 설명 주석 추가
(동작 변경 없음 — 빌드/테스트/타입체크 전부 GREEN으로 무회귀 확인).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 23:40:28 +09:00

72 lines
2.4 KiB
TypeScript

// ============================================================================
// 보험계약 API — 백엔드 /api/contracts (ContractController)
// 계약(contract): 고객이 가입한 보험증권 1건. 모든 수수료 계산의 출발점.
// - premium(보험료): 계약자가 내는 보험료. payCycle(납입주기): 월납/연납 등.
// - policyNo(증권번호): 계약 식별 번호. contractorName(계약자)/insuredName(피보험자).
// ============================================================================
import api, { PageResponse, unwrap } from './request';
// 계약 조회 응답. 설계사/상품/보험사/보험료/상태 등 계약 요약.
export interface ContractResp {
contractId: number;
agentId: number;
agentName: string;
orgName?: string;
productCode?: string;
productName?: string;
companyCode?: string;
companyName?: string;
insuranceType?: string;
policyNo: string;
contractorName?: string;
insuredName?: string;
premium?: number;
payCycle?: string;
payCycleName?: string;
status: string;
statusName?: string;
contractDate: string;
salesChannel?: string;
salesChannelName?: string;
}
export interface ContractSearchParam {
pageNum?: number;
pageSize?: number;
searchKeyword?: string;
agentId?: number;
companyId?: number;
insuranceType?: string;
status?: string;
startDate?: string;
endDate?: string;
}
// 계약 등록/수정 요청. payPeriod(납입기간)/coveragePeriod(보장기간) 등 포함.
export interface ContractSaveReq {
agentId: number;
productId: number;
policyNo: string;
contractorName?: string;
insuredName?: string;
premium?: number;
payCycle?: string;
payPeriod?: number;
coveragePeriod?: number;
contractDate?: string;
effectiveDate?: string;
salesChannel?: string;
}
export const contractApi = {
// 계약 목록 — GET /api/contracts
list: (p: ContractSearchParam) =>
unwrap<PageResponse<ContractResp>>(api.get('/api/contracts', { params: p })),
// 계약 상세 — GET /api/contracts/{id}
detail: (id: number) => unwrap<ContractResp>(api.get(`/api/contracts/${id}`)),
// 계약 등록(생성된 id 반환) — POST /api/contracts
create: (req: ContractSaveReq) => unwrap<number>(api.post('/api/contracts', req)),
// 계약 수정 — PUT /api/contracts/{id}
update: (id: number, req: ContractSaveReq) => unwrap<void>(api.put(`/api/contracts/${id}`, req)),
};