소스 업데이트
All checks were successful
Deploy Tools / deploy (push) Successful in 1m25s

This commit is contained in:
jade
2026-09-10 13:28:40 +09:00
parent f3099b76ea
commit d2a82db6a4
108 changed files with 41 additions and 2456 deletions

View File

@@ -3,6 +3,5 @@ WORKDIR /app
RUN apk add --no-cache tzdata
ENV TZ=Asia/Seoul
COPY dat-was-sal/build/libs/*-SNAPSHOT.jar app.jar
EXPOSE 8082
EXPOSE 8083
ENTRYPOINT ["java", "-jar", "app.jar"]

View File

@@ -1,9 +1,9 @@
plugins {
// SMS Tool Pod를 독립 실행 가능한 Spring Boot JAR로 생성합니다.
// Spring Boot 3.5.11 version is managed by the root build.gradle.
id 'org.springframework.boot'
}
dependencies {
// MCP Server, Tool 공통 처리, MCI/EAI 연동 기반은 dat-was-lib에서 상속합니다.
// Shared MCP, Glow integration, validation, logging, Lombok and MapStruct configuration.
implementation project(':dat-was-lib')
}

View File

@@ -1,14 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.converter;
import io.shinhanlife.dat.mcc.biz.cmm.dto.ClaimSearchRequest;
import io.shinhanlife.dat.mcc.biz.cmm.dto.ClaimSearchResponse;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncla.io.CLCNNB00001_I;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncla.io.CLCNNB00001_O;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface ClaimSearchConverter {
CLCNNB00001_I toLegacyRequest(ClaimSearchRequest request);
ClaimSearchRequest toRequest(CLCNNB00001_I mciRequest);
ClaimSearchResponse toResponse(CLCNNB00001_O mciRes);
}

View File

@@ -1,17 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.converter;
import io.shinhanlife.dat.mcc.biz.cmm.dto.MemoListRetrieverRequest;
import io.shinhanlife.dat.mcc.biz.cmm.dto.MemoListRetrieverResponse;
import io.shinhanlife.dat.mcc.infra.itrf.http.memo.io.MemoListRetrieverHttpRequest;
import io.shinhanlife.dat.mcc.infra.itrf.http.memo.io.MemoListRetrieverHttpResponse;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MemoListRetrieverConverter {
// Field names differ? Add mappings like this before the method.
// @Mapping(source = "sourceField", target = "targetField")
MemoListRetrieverHttpRequest toHttpRequest(MemoListRetrieverRequest request);
MemoListRetrieverResponse toResponse(MemoListRetrieverHttpResponse httpResponse);
}

View File

@@ -1,16 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ClaimSearchRequest {
@Schema(description = "보험금 청구번호", example = "CLM202608100001", requiredMode = Schema.RequiredMode.REQUIRED)
private String claimNo;
@Schema(description = "보험 계약번호", example = "10023456789")
private String contractNo;
}

View File

@@ -1,22 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ClaimSearchResponse {
private String resultCode;
private String resultMessage;
@Schema(description = "청구 처리 상태 코드", example = "RECEIVED", requiredMode = Schema.RequiredMode.REQUIRED)
private String status;
@Schema(description = "청구 처리 상태명", example = "접수", requiredMode = Schema.RequiredMode.REQUIRED)
private String statusLabel;
@Schema(description = "승인 금액", example = "150000")
private Long approvedAmount;
}

View File

@@ -1,16 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MemoListRetrieverRequest {
@Schema(description = "조회할 의뢰서 상태", example = "OPEN", requiredMode = Schema.RequiredMode.REQUIRED)
private String memoStatus;
@Schema(description = "검색 키워드", example = "프로젝트", requiredMode = Schema.RequiredMode.REQUIRED)
private String searchKeyword;
}

View File

@@ -1,13 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MemoListRetrieverResponse {
private String resultCode;
private String resultMessage;
}

View File

@@ -1,41 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.usecase;
import org.springaicommunity.mcp.annotation.McpTool;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.cmm.dto.ClaimSearchRequest;
import io.shinhanlife.dat.mcc.biz.cmm.dto.ClaimSearchResponse;
/**
* @package io.shinhanlife.dat.mcc.biz.cmm.usecase
* @className ClaimSearchUseCase
* @description AX HUB 시스템 처리 클래스
* @author jade
* @create 2026.08.10
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.08.10 jade 최초생성
*
* </pre>
*/
public interface ClaimSearchUseCase {
@McpTool(name = "cmm_claim_search", title = "청구번호 또는 계약번호로 보험금 청구 상태를 조회한다.", description = "청구번호 또는 계약번호로 보험금 청구 상태를 조회한다.")
@GrowToolHint(
requiresApproval = false,
categoryKey = "cmm",
mappingId = "DIRECT_CMM_CLAIM_SEARCH",
functionDescription = "청구번호 또는 계약번호로 보험금 청구 상태와 심사 결과를 조회한다.",
whenToUse = "사용자가 기존 보험금 청구의 진행 상태나 지급 결과를 확인하려는 경우 사용한다.",
whenNotToUse = "보험금 청구를 새로 접수하거나 기존 청구 내용을 변경하려는 경우에는 사용하지 않는다.",
ioLimits = "청구번호 또는 계약번호 중 하나 이상이 필요하며 조회 결과만 반환한다.",
displayDescription = "보험금 청구 상태와 심사 결과를 조회합니다.",
exampleQueries = {"내 보험금 청구가 어디까지 진행됐는지 알려줘", "계약번호로 최근 청구 상태를 확인해줘", "청구 심사 결과가 나왔는지 조회해줘"},
destructive = false,
idempotent = true,
tags = {"보험금", "청구조회"},
ownerOrg = "MCP_TOOL"
)
ClaimSearchResponse searchClaim(ClaimSearchRequest req);
}

View File

@@ -1,41 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.usecase;
import org.springaicommunity.mcp.annotation.McpTool;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.cmm.dto.MemoListRetrieverRequest;
import io.shinhanlife.dat.mcc.biz.cmm.dto.MemoListRetrieverResponse;
/**
* @package io.shinhanlife.dat.mcc.biz.cmm.usecase
* @className MemoListRetrieverUseCase
* @description AX HUB 시스템 처리 클래스
* @author Admin
* @create 2026.08.11
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.08.11 Admin 최초생성
*
* </pre>
*/
public interface MemoListRetrieverUseCase {
@McpTool(name = "cmm_memo_retriever", title = "의뢰서 목록 조회", description = "의뢰서 목록을 조회하여 의뢰 정보를 반환합니다.")
@GrowToolHint(
requiresApproval = false,
categoryKey = "cmm",
mappingId = "DIRECT_CMM_MEMO_RETRIEVER",
functionDescription = "상태와 검색어 조건으로 의뢰서 목록을 조회한다.",
whenToUse = "사용자가 등록된 의뢰서의 목록이나 처리 현황을 찾으려는 경우 사용한다.",
whenNotToUse = "의뢰서를 신규 등록하거나 내용을 변경하려는 경우에는 사용하지 않는다.",
ioLimits = "선택 조건에 해당하는 의뢰서 요약 목록만 반환한다.",
displayDescription = "조건에 맞는 의뢰서 목록을 조회합니다.",
exampleQueries = {"처리 중인 의뢰서를 보여줘", "지난번 계약 관련 의뢰서를 찾아줘", "완료된 의뢰서 목록을 조회해줘"},
destructive = false,
idempotent = true,
tags = {"의뢰서", "목록조회"},
ownerOrg = "MCP_TOOL"
)
MemoListRetrieverResponse retrieveMemoList(MemoListRetrieverRequest req);
}

View File

@@ -1,69 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.usecase.impl;
import io.shinhanlife.dat.mcc.biz.cmm.dto.ClaimSearchRequest;
import io.shinhanlife.dat.mcc.biz.cmm.dto.ClaimSearchResponse;
import io.shinhanlife.dat.mcc.biz.cmm.usecase.ClaimSearchUseCase;
import io.shinhanlife.glow.communication.dto.Transfer;
import io.shinhanlife.glow.BizException;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import io.shinhanlife.dat.mcc.biz.cmm.converter.ClaimSearchConverter;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncla.io.CLCNNB00001_I;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncla.io.CLCNNB00001_O;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncla.MciNclaClient;
/**
* @package io.shinhanlife.dat.mcc.biz.cmm.usecase.impl
* @className ClaimSearchUseCaseImpl
* @description AX HUB 시스템 처리 클래스
* @author jade
* @create 2026.08.10
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.08.10 jade 최초생성
*
* </pre>
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ClaimSearchUseCaseImpl implements ClaimSearchUseCase {
private final MciNclaClient mci;
private final ClaimSearchConverter converter;
@Override
public ClaimSearchResponse searchClaim(ClaimSearchRequest req) {
log.info("[MCI Tool] {} 요청 수신.", "cmm_claim_search");
try {
// MapStruct를 이용한 자동 매핑 (AI DTO -> MCI DTO)
CLCNNB00001_I mciReq = converter.toLegacyRequest(req);
Transfer<CLCNNB00001_O> resTransfer = mci.callTo(
"CLCNNB00001",
null,
mciReq,
CLCNNB00001_O.class
);
ClaimSearchResponse response = new ClaimSearchResponse();
if (resTransfer.getBody() != null) {
response = converter.toResponse(resTransfer.getBody());
}
response.setResultCode("SUCCESS");
response.setResultMessage(resTransfer.getBody() != null
? "MCI call completed."
: "MCI call completed without a response body.");
return response;
} catch (BizException e) {
log.error("[MCI Tool] 연동 중 오류 발생: {}", e.getMessage(), e);
ClaimSearchResponse response = new ClaimSearchResponse();
response.setResultCode("ERROR");
response.setResultMessage(e.getMessage() != null ? e.getMessage() : "Unknown error");
return response;
}
}
}

View File

@@ -1,39 +0,0 @@
package io.shinhanlife.dat.mcc.biz.cmm.usecase.impl;
import io.shinhanlife.dat.mcc.biz.cmm.converter.MemoListRetrieverConverter;
import io.shinhanlife.dat.mcc.biz.cmm.dto.MemoListRetrieverRequest;
import io.shinhanlife.dat.mcc.biz.cmm.dto.MemoListRetrieverResponse;
import io.shinhanlife.dat.mcc.infra.itrf.http.memo.MemoClient;
import io.shinhanlife.dat.mcc.infra.itrf.http.memo.io.MemoListRetrieverHttpRequest;
import io.shinhanlife.dat.mcc.infra.itrf.http.memo.io.MemoListRetrieverHttpResponse;
import io.shinhanlife.dat.mcc.biz.cmm.usecase.MemoListRetrieverUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class MemoListRetrieverUseCaseImpl implements MemoListRetrieverUseCase {
private final MemoListRetrieverConverter converter;
private final MemoClient memoClient;
@Override
public MemoListRetrieverResponse retrieveMemoList(MemoListRetrieverRequest req) {
MemoListRetrieverHttpRequest httpRequest = converter.toHttpRequest(req);
MemoListRetrieverHttpResponse httpResponse = memoClient.call(httpRequest, MemoListRetrieverHttpResponse.class);
MemoListRetrieverResponse response = converter.toResponse(httpResponse);
// Sparrow NULL_RETURN (널 역참조) 방어 로직
if (response == null) {
response = new MemoListRetrieverResponse();
response.setResultCode("ERROR");
response.setResultMessage("HTTP API 응답이 없거나 변환에 실패했습니다.");
return response;
}
response.setResultCode("SUCCESS");
response.setResultMessage("HTTP API call completed.");
return response;
}
}

View File

@@ -1,20 +0,0 @@
package io.shinhanlife.dat.mcc.biz.lic.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springaicommunity.mcp.annotation.McpToolParam;
@Data
public class LicToolRequest {
@McpToolParam(description = "상품코드", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String productCode;
@McpToolParam(description = "계약심사번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String contractId;
@McpToolParam(description = "조회 기준일(YYYY-MM-DD)", required = false)
@Schema(pattern = "^\\d{4}-\\d{2}-\\d{2}$")
private String queryDate;
}

View File

@@ -1,15 +0,0 @@
package io.shinhanlife.dat.mcc.biz.lic.dto;
import java.util.List;
import lombok.Data;
@Data
public class LicToolResponse {
private String toolName;
private String category;
private String referenceId;
private String status;
private String summary;
private String asOfDate;
private List<String> details;
}

View File

@@ -1,198 +0,0 @@
package io.shinhanlife.dat.mcc.biz.lic.usecase;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.lic.dto.LicToolRequest;
import io.shinhanlife.dat.mcc.biz.lic.dto.LicToolResponse;
import org.springaicommunity.mcp.annotation.McpTool;
public interface LicUnderwritingUseCase {
@McpTool(name = "lic_product_info", title = "상품 정보 조회", description = "상품 정보 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_PRODUCT_INFO",
functionDescription = "상품 정보 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 상품 정보 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "상품 정보 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"상품 정보 조회 정보를 보여줘", "상품 정보 조회 결과를 확인해줘", "현재 상품 정보 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getProductInfo(LicToolRequest request);
@McpTool(name = "lic_product_coverage", title = "상품 보장내용 조회", description = "상품 보장내용 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_PRODUCT_COVERAGE",
functionDescription = "상품 보장내용 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 상품 보장내용 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "상품 보장내용 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"상품 보장내용 조회 정보를 보여줘", "상품 보장내용 조회 결과를 확인해줘", "현재 상품 보장내용 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getProductCoverage(LicToolRequest request);
@McpTool(name = "lic_product_premium_table", title = "상품 보험료 요율표 조회", description = "상품 보험료 요율표 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_PRODUCT_PREMIUM_TABLE",
functionDescription = "상품 보험료 요율표 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 상품 보험료 요율표 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "상품 보험료 요율표 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"상품 보험료 요율표 조회 정보를 보여줘", "상품 보험료 요율표 조회 결과를 확인해줘", "현재 상품 보험료 요율표 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getProductPremiumTable(LicToolRequest request);
@McpTool(name = "lic_contract_review_status", title = "계약심사 진행상태 조회", description = "계약심사 진행상태 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_CONTRACT_REVIEW_STATUS",
functionDescription = "계약심사 진행상태 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 계약심사 진행상태 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "계약심사 진행상태 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"계약심사 진행상태 조회 정보를 보여줘", "계약심사 진행상태 조회 결과를 확인해줘", "현재 계약심사 진행상태 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getContractReviewStatus(LicToolRequest request);
@McpTool(name = "lic_contract_review_document", title = "계약심사 제출서류 현황 조회", description = "계약심사 제출서류 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_CONTRACT_REVIEW_DOCUMENT",
functionDescription = "계약심사 제출서류 현황 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 계약심사 제출서류 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "계약심사 제출서류 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"계약심사 제출서류 현황 조회 정보를 보여줘", "계약심사 제출서류 현황 조회 결과를 확인해줘", "현재 계약심사 제출서류 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getContractReviewDocument(LicToolRequest request);
@McpTool(name = "lic_contract_review_result", title = "계약심사 결과 조회", description = "계약심사 결과 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_CONTRACT_REVIEW_RESULT",
functionDescription = "계약심사 결과 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 계약심사 결과 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "계약심사 결과 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"계약심사 결과 조회 정보를 보여줘", "계약심사 결과 조회 결과를 확인해줘", "현재 계약심사 결과 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getContractReviewResult(LicToolRequest request);
@McpTool(name = "lic_contract_review_history", title = "계약심사 이력 조회", description = "계약심사 이력 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_CONTRACT_REVIEW_HISTORY",
functionDescription = "계약심사 이력 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 계약심사 이력 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "계약심사 이력 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"계약심사 이력 조회 정보를 보여줘", "계약심사 이력 조회 결과를 확인해줘", "현재 계약심사 이력 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getContractReviewHistory(LicToolRequest request);
@McpTool(name = "lic_underwriting_result", title = "언더라이팅 인수심사 결과 조회", description = "언더라이팅 인수심사 결과 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_UNDERWRITING_RESULT",
functionDescription = "언더라이팅 인수심사 결과 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 언더라이팅 인수심사 결과 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "언더라이팅 인수심사 결과 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"언더라이팅 인수심사 결과 조회 정보를 보여줘", "언더라이팅 인수심사 결과 조회 결과를 확인해줘", "현재 언더라이팅 인수심사 결과 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getUnderwritingResult(LicToolRequest request);
@McpTool(name = "lic_underwriting_risk_grade", title = "언더라이팅 위험등급 조회", description = "언더라이팅 위험등급 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_UNDERWRITING_RISK_GRADE",
functionDescription = "언더라이팅 위험등급 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 언더라이팅 위험등급 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "언더라이팅 위험등급 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"언더라이팅 위험등급 조회 정보를 보여줘", "언더라이팅 위험등급 조회 결과를 확인해줘", "현재 언더라이팅 위험등급 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getUnderwritingRiskGrade(LicToolRequest request);
@McpTool(name = "lic_underwriting_additional_request", title = "언더라이팅 추가자료 요청 현황 조회", description = "언더라이팅 추가자료 요청 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "lic",
mappingId = "DIRECT_LIC_UNDERWRITING_ADDITIONAL_REQUEST",
functionDescription = "언더라이팅 추가자료 요청 현황 조회 정보를 조회합니다.",
whenToUse = "상품·계약심사 업무에서 언더라이팅 추가자료 요청 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "언더라이팅 추가자료 요청 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"언더라이팅 추가자료 요청 현황 조회 정보를 보여줘", "언더라이팅 추가자료 요청 현황 조회 결과를 확인해줘", "현재 언더라이팅 추가자료 요청 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"lic", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
LicToolResponse getUnderwritingAdditionalRequest(LicToolRequest request);
}

View File

@@ -1,77 +0,0 @@
package io.shinhanlife.dat.mcc.biz.lic.usecase.impl;
import io.shinhanlife.dat.mcc.biz.lic.dto.LicToolRequest;
import io.shinhanlife.dat.mcc.biz.lic.dto.LicToolResponse;
import io.shinhanlife.dat.mcc.biz.lic.usecase.LicUnderwritingUseCase;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class LicUnderwritingUseCaseImpl implements LicUnderwritingUseCase {
@Override
public LicToolResponse getProductInfo(LicToolRequest request) {
return mockResponse(request, "lic_product_info", "상품 정보 조회");
}
@Override
public LicToolResponse getProductCoverage(LicToolRequest request) {
return mockResponse(request, "lic_product_coverage", "상품 보장내용 조회");
}
@Override
public LicToolResponse getProductPremiumTable(LicToolRequest request) {
return mockResponse(request, "lic_product_premium_table", "상품 보험료 요율표 조회");
}
@Override
public LicToolResponse getContractReviewStatus(LicToolRequest request) {
return mockResponse(request, "lic_contract_review_status", "계약심사 진행상태 조회");
}
@Override
public LicToolResponse getContractReviewDocument(LicToolRequest request) {
return mockResponse(request, "lic_contract_review_document", "계약심사 제출서류 현황 조회");
}
@Override
public LicToolResponse getContractReviewResult(LicToolRequest request) {
return mockResponse(request, "lic_contract_review_result", "계약심사 결과 조회");
}
@Override
public LicToolResponse getContractReviewHistory(LicToolRequest request) {
return mockResponse(request, "lic_contract_review_history", "계약심사 이력 조회");
}
@Override
public LicToolResponse getUnderwritingResult(LicToolRequest request) {
return mockResponse(request, "lic_underwriting_result", "언더라이팅 인수심사 결과 조회");
}
@Override
public LicToolResponse getUnderwritingRiskGrade(LicToolRequest request) {
return mockResponse(request, "lic_underwriting_risk_grade", "언더라이팅 위험등급 조회");
}
@Override
public LicToolResponse getUnderwritingAdditionalRequest(LicToolRequest request) {
return mockResponse(request, "lic_underwriting_additional_request", "언더라이팅 추가자료 요청 현황 조회");
}
private LicToolResponse mockResponse(LicToolRequest request, String toolName, String title) {
LicToolResponse response = new LicToolResponse();
response.setToolName(toolName);
response.setCategory("LIC");
response.setReferenceId(request != null && hasText(request.getProductCode()) ? request.getProductCode()
: request != null && hasText(request.getContractId()) ? request.getContractId() : "LIC-000001");
response.setStatus("정상");
response.setSummary(title + " 결과");
response.setAsOfDate(request != null && hasText(request.getQueryDate()) ? request.getQueryDate() : "2026-08-14");
response.setDetails(List.of(title + " 모의 상세정보", "외부 시스템을 변경하지 않는 조회 결과"));
return response;
}
private boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@@ -1,20 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sof.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springaicommunity.mcp.annotation.McpToolParam;
@Data
public class SofToolRequest {
@McpToolParam(description = "설계사번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String agentId;
@McpToolParam(description = "GA 조직번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String organizationId;
@McpToolParam(description = "조회 기준일(YYYY-MM-DD)", required = false)
@Schema(pattern = "^\\d{4}-\\d{2}-\\d{2}$")
private String queryDate;
}

View File

@@ -1,15 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sof.dto;
import java.util.List;
import lombok.Data;
@Data
public class SofToolResponse {
private String toolName;
private String category;
private String referenceId;
private String status;
private String summary;
private String asOfDate;
private List<String> details;
}

View File

@@ -1,198 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sof.usecase;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.sof.dto.SofToolRequest;
import io.shinhanlife.dat.mcc.biz.sof.dto.SofToolResponse;
import org.springaicommunity.mcp.annotation.McpTool;
public interface SofFieldActivityUseCase {
@McpTool(name = "sof_activity_daily", title = "GA 일별 활동 현황 조회", description = "GA 일별 활동 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_ACTIVITY_DAILY",
functionDescription = "GA 일별 활동 현황 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 GA 일별 활동 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "GA 일별 활동 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"GA 일별 활동 현황 조회 정보를 보여줘", "GA 일별 활동 현황 조회 결과를 확인해줘", "현재 GA 일별 활동 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getActivityDaily(SofToolRequest request);
@McpTool(name = "sof_visit_count", title = "고객 방문 건수 조회", description = "고객 방문 건수 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_VISIT_COUNT",
functionDescription = "고객 방문 건수 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 고객 방문 건수 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "고객 방문 건수 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"고객 방문 건수 조회 정보를 보여줘", "고객 방문 건수 조회 결과를 확인해줘", "현재 고객 방문 건수 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getVisitCount(SofToolRequest request);
@McpTool(name = "sof_call_activity", title = "콜 활동 현황 조회", description = "콜 활동 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_CALL_ACTIVITY",
functionDescription = "콜 활동 현황 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 콜 활동 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "콜 활동 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"콜 활동 현황 조회 정보를 보여줘", "콜 활동 현황 조회 결과를 확인해줘", "현재 콜 활동 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getCallActivity(SofToolRequest request);
@McpTool(name = "sof_customer_consulting", title = "고객 상담 현황 조회", description = "고객 상담 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_CUSTOMER_CONSULTING",
functionDescription = "고객 상담 현황 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 고객 상담 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "고객 상담 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"고객 상담 현황 조회 정보를 보여줘", "고객 상담 현황 조회 결과를 확인해줘", "현재 고객 상담 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getCustomerConsulting(SofToolRequest request);
@McpTool(name = "sof_prospect_list", title = "신규 발굴 고객 목록 조회", description = "신규 발굴 고객 목록 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_PROSPECT_LIST",
functionDescription = "신규 발굴 고객 목록 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 신규 발굴 고객 목록 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "신규 발굴 고객 목록 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"신규 발굴 고객 목록 조회 정보를 보여줘", "신규 발굴 고객 목록 조회 결과를 확인해줘", "현재 신규 발굴 고객 목록 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getProspectList(SofToolRequest request);
@McpTool(name = "sof_activity_calendar", title = "활동 일정 조회", description = "활동 일정 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_ACTIVITY_CALENDAR",
functionDescription = "활동 일정 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 활동 일정 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "활동 일정 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"활동 일정 조회 정보를 보여줘", "활동 일정 조회 결과를 확인해줘", "현재 활동 일정 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getActivityCalendar(SofToolRequest request);
@McpTool(name = "sof_activity_report_status", title = "활동일지 제출 현황 조회", description = "활동일지 제출 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_ACTIVITY_REPORT_STATUS",
functionDescription = "활동일지 제출 현황 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 활동일지 제출 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "활동일지 제출 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"활동일지 제출 현황 조회 정보를 보여줘", "활동일지 제출 현황 조회 결과를 확인해줘", "현재 활동일지 제출 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getActivityReportStatus(SofToolRequest request);
@McpTool(name = "sof_training_completion", title = "교육 이수 현황 조회", description = "교육 이수 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_TRAINING_COMPLETION",
functionDescription = "교육 이수 현황 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 교육 이수 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "교육 이수 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"교육 이수 현황 조회 정보를 보여줘", "교육 이수 현황 조회 결과를 확인해줘", "현재 교육 이수 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getTrainingCompletion(SofToolRequest request);
@McpTool(name = "sof_field_support_request", title = "현장 지원 요청 현황 조회", description = "현장 지원 요청 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_FIELD_SUPPORT_REQUEST",
functionDescription = "현장 지원 요청 현황 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 현장 지원 요청 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "현장 지원 요청 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"현장 지원 요청 현황 조회 정보를 보여줘", "현장 지원 요청 현황 조회 결과를 확인해줘", "현재 현장 지원 요청 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getFieldSupportRequest(SofToolRequest request);
@McpTool(name = "sof_activity_summary", title = "GA 활동 종합 현황 조회", description = "GA 활동 종합 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sof",
mappingId = "DIRECT_SOF_ACTIVITY_SUMMARY",
functionDescription = "GA 활동 종합 현황 조회 정보를 조회합니다.",
whenToUse = "GA 활동 업무에서 GA 활동 종합 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "GA 활동 종합 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"GA 활동 종합 현황 조회 정보를 보여줘", "GA 활동 종합 현황 조회 결과를 확인해줘", "현재 GA 활동 종합 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sof", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SofToolResponse getActivitySummary(SofToolRequest request);
}

View File

@@ -1,77 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sof.usecase.impl;
import io.shinhanlife.dat.mcc.biz.sof.dto.SofToolRequest;
import io.shinhanlife.dat.mcc.biz.sof.dto.SofToolResponse;
import io.shinhanlife.dat.mcc.biz.sof.usecase.SofFieldActivityUseCase;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class SofFieldActivityUseCaseImpl implements SofFieldActivityUseCase {
@Override
public SofToolResponse getActivityDaily(SofToolRequest request) {
return mockResponse(request, "sof_activity_daily", "GA 일별 활동 현황 조회");
}
@Override
public SofToolResponse getVisitCount(SofToolRequest request) {
return mockResponse(request, "sof_visit_count", "고객 방문 건수 조회");
}
@Override
public SofToolResponse getCallActivity(SofToolRequest request) {
return mockResponse(request, "sof_call_activity", "콜 활동 현황 조회");
}
@Override
public SofToolResponse getCustomerConsulting(SofToolRequest request) {
return mockResponse(request, "sof_customer_consulting", "고객 상담 현황 조회");
}
@Override
public SofToolResponse getProspectList(SofToolRequest request) {
return mockResponse(request, "sof_prospect_list", "신규 발굴 고객 목록 조회");
}
@Override
public SofToolResponse getActivityCalendar(SofToolRequest request) {
return mockResponse(request, "sof_activity_calendar", "활동 일정 조회");
}
@Override
public SofToolResponse getActivityReportStatus(SofToolRequest request) {
return mockResponse(request, "sof_activity_report_status", "활동일지 제출 현황 조회");
}
@Override
public SofToolResponse getTrainingCompletion(SofToolRequest request) {
return mockResponse(request, "sof_training_completion", "교육 이수 현황 조회");
}
@Override
public SofToolResponse getFieldSupportRequest(SofToolRequest request) {
return mockResponse(request, "sof_field_support_request", "현장 지원 요청 현황 조회");
}
@Override
public SofToolResponse getActivitySummary(SofToolRequest request) {
return mockResponse(request, "sof_activity_summary", "GA 활동 종합 현황 조회");
}
private SofToolResponse mockResponse(SofToolRequest request, String toolName, String title) {
SofToolResponse response = new SofToolResponse();
response.setToolName(toolName);
response.setCategory("SOF");
response.setReferenceId(request != null && hasText(request.getAgentId()) ? request.getAgentId()
: request != null && hasText(request.getOrganizationId()) ? request.getOrganizationId() : "SOF-000001");
response.setStatus("정상");
response.setSummary(title + " 결과");
response.setAsOfDate(request != null && hasText(request.getQueryDate()) ? request.getQueryDate() : "2026-08-14");
response.setDetails(List.of(title + " 모의 상세정보", "외부 시스템을 변경하지 않는 조회 결과"));
return response;
}
private boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@@ -1,20 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sog.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springaicommunity.mcp.annotation.McpToolParam;
@Data
public class SogToolRequest {
@McpToolParam(description = "설계사번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String agentId;
@McpToolParam(description = "GA 조직번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String organizationId;
@McpToolParam(description = "조회 기준일(YYYY-MM-DD)", required = false)
@Schema(pattern = "^\\d{4}-\\d{2}-\\d{2}$")
private String queryDate;
}

View File

@@ -1,15 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sog.dto;
import java.util.List;
import lombok.Data;
@Data
public class SogToolResponse {
private String toolName;
private String category;
private String referenceId;
private String status;
private String summary;
private String asOfDate;
private List<String> details;
}

View File

@@ -1,198 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sog.usecase;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.sog.dto.SogToolRequest;
import io.shinhanlife.dat.mcc.biz.sog.dto.SogToolResponse;
import org.springaicommunity.mcp.annotation.McpTool;
public interface SogSalesPerformanceUseCase {
@McpTool(name = "sog_target_summary", title = "GA 개인별 영업목표 요약 조회", description = "GA 개인별 영업목표 요약 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_TARGET_SUMMARY",
functionDescription = "GA 개인별 영업목표 요약 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 GA 개인별 영업목표 요약 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "GA 개인별 영업목표 요약 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"GA 개인별 영업목표 요약 조회 정보를 보여줘", "GA 개인별 영업목표 요약 조회 결과를 확인해줘", "현재 GA 개인별 영업목표 요약 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getTargetSummary(SogToolRequest request);
@McpTool(name = "sog_target_progress", title = "영업목표 달성률 조회", description = "영업목표 달성률 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_TARGET_PROGRESS",
functionDescription = "영업목표 달성률 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 영업목표 달성률 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "영업목표 달성률 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"영업목표 달성률 조회 정보를 보여줘", "영업목표 달성률 조회 결과를 확인해줘", "현재 영업목표 달성률 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getTargetProgress(SogToolRequest request);
@McpTool(name = "sog_monthly_performance", title = "GA 월별 실적 조회", description = "GA 월별 실적 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_MONTHLY_PERFORMANCE",
functionDescription = "GA 월별 실적 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 GA 월별 실적 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "GA 월별 실적 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"GA 월별 실적 조회 정보를 보여줘", "GA 월별 실적 조회 결과를 확인해줘", "현재 GA 월별 실적 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getMonthlyPerformance(SogToolRequest request);
@McpTool(name = "sog_product_performance", title = "상품별 실적 조회", description = "상품별 실적 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_PRODUCT_PERFORMANCE",
functionDescription = "상품별 실적 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 상품별 실적 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "상품별 실적 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"상품별 실적 조회 정보를 보여줘", "상품별 실적 조회 결과를 확인해줘", "현재 상품별 실적 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getProductPerformance(SogToolRequest request);
@McpTool(name = "sog_new_contract_count", title = "신계약 건수 실적 조회", description = "신계약 건수 실적 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_NEW_CONTRACT_COUNT",
functionDescription = "신계약 건수 실적 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 신계약 건수 실적 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "신계약 건수 실적 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"신계약 건수 실적 조회 정보를 보여줘", "신계약 건수 실적 조회 결과를 확인해줘", "현재 신계약 건수 실적 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getNewContractCount(SogToolRequest request);
@McpTool(name = "sog_premium_performance", title = "보험료 실적 조회", description = "보험료 실적 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_PREMIUM_PERFORMANCE",
functionDescription = "보험료 실적 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 보험료 실적 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "보험료 실적 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"보험료 실적 조회 정보를 보여줘", "보험료 실적 조회 결과를 확인해줘", "현재 보험료 실적 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getPremiumPerformance(SogToolRequest request);
@McpTool(name = "sog_sales_ranking", title = "GA 영업 순위 조회", description = "GA 영업 순위 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_SALES_RANKING",
functionDescription = "GA 영업 순위 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 GA 영업 순위 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "GA 영업 순위 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"GA 영업 순위 조회 정보를 보여줘", "GA 영업 순위 조회 결과를 확인해줘", "현재 GA 영업 순위 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getSalesRanking(SogToolRequest request);
@McpTool(name = "sog_incentive_summary", title = "영업 인센티브 요약 조회", description = "영업 인센티브 요약 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_INCENTIVE_SUMMARY",
functionDescription = "영업 인센티브 요약 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 영업 인센티브 요약 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "영업 인센티브 요약 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"영업 인센티브 요약 조회 정보를 보여줘", "영업 인센티브 요약 조회 결과를 확인해줘", "현재 영업 인센티브 요약 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getIncentiveSummary(SogToolRequest request);
@McpTool(name = "sog_target_history", title = "영업목표 변경 이력 조회", description = "영업목표 변경 이력 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_TARGET_HISTORY",
functionDescription = "영업목표 변경 이력 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 영업목표 변경 이력 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "영업목표 변경 이력 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"영업목표 변경 이력 조회 정보를 보여줘", "영업목표 변경 이력 조회 결과를 확인해줘", "현재 영업목표 변경 이력 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getTargetHistory(SogToolRequest request);
@McpTool(name = "sog_performance_comparison", title = "전년 동기 대비 실적 비교 조회", description = "전년 동기 대비 실적 비교 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sog",
mappingId = "DIRECT_SOG_PERFORMANCE_COMPARISON",
functionDescription = "전년 동기 대비 실적 비교 조회 정보를 조회합니다.",
whenToUse = "GA 영업 업무에서 전년 동기 대비 실적 비교 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "전년 동기 대비 실적 비교 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"전년 동기 대비 실적 비교 조회 정보를 보여줘", "전년 동기 대비 실적 비교 조회 결과를 확인해줘", "현재 전년 동기 대비 실적 비교 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sog", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SogToolResponse getPerformanceComparison(SogToolRequest request);
}

View File

@@ -1,77 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sog.usecase.impl;
import io.shinhanlife.dat.mcc.biz.sog.dto.SogToolRequest;
import io.shinhanlife.dat.mcc.biz.sog.dto.SogToolResponse;
import io.shinhanlife.dat.mcc.biz.sog.usecase.SogSalesPerformanceUseCase;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class SogSalesPerformanceUseCaseImpl implements SogSalesPerformanceUseCase {
@Override
public SogToolResponse getTargetSummary(SogToolRequest request) {
return mockResponse(request, "sog_target_summary", "GA 개인별 영업목표 요약 조회");
}
@Override
public SogToolResponse getTargetProgress(SogToolRequest request) {
return mockResponse(request, "sog_target_progress", "영업목표 달성률 조회");
}
@Override
public SogToolResponse getMonthlyPerformance(SogToolRequest request) {
return mockResponse(request, "sog_monthly_performance", "GA 월별 실적 조회");
}
@Override
public SogToolResponse getProductPerformance(SogToolRequest request) {
return mockResponse(request, "sog_product_performance", "상품별 실적 조회");
}
@Override
public SogToolResponse getNewContractCount(SogToolRequest request) {
return mockResponse(request, "sog_new_contract_count", "신계약 건수 실적 조회");
}
@Override
public SogToolResponse getPremiumPerformance(SogToolRequest request) {
return mockResponse(request, "sog_premium_performance", "보험료 실적 조회");
}
@Override
public SogToolResponse getSalesRanking(SogToolRequest request) {
return mockResponse(request, "sog_sales_ranking", "GA 영업 순위 조회");
}
@Override
public SogToolResponse getIncentiveSummary(SogToolRequest request) {
return mockResponse(request, "sog_incentive_summary", "영업 인센티브 요약 조회");
}
@Override
public SogToolResponse getTargetHistory(SogToolRequest request) {
return mockResponse(request, "sog_target_history", "영업목표 변경 이력 조회");
}
@Override
public SogToolResponse getPerformanceComparison(SogToolRequest request) {
return mockResponse(request, "sog_performance_comparison", "전년 동기 대비 실적 비교 조회");
}
private SogToolResponse mockResponse(SogToolRequest request, String toolName, String title) {
SogToolResponse response = new SogToolResponse();
response.setToolName(toolName);
response.setCategory("SOG");
response.setReferenceId(request != null && hasText(request.getAgentId()) ? request.getAgentId()
: request != null && hasText(request.getOrganizationId()) ? request.getOrganizationId() : "SOG-000001");
response.setStatus("정상");
response.setSummary(title + " 결과");
response.setAsOfDate(request != null && hasText(request.getQueryDate()) ? request.getQueryDate() : "2026-08-14");
response.setDetails(List.of(title + " 모의 상세정보", "외부 시스템을 변경하지 않는 조회 결과"));
return response;
}
private boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@@ -1,20 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sot.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springaicommunity.mcp.annotation.McpToolParam;
@Data
public class SotToolRequest {
@McpToolParam(description = "고객번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String customerId;
@McpToolParam(description = "가입설계번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String contractId;
@McpToolParam(description = "조회 기준일(YYYY-MM-DD)", required = false)
@Schema(pattern = "^\\d{4}-\\d{2}-\\d{2}$")
private String queryDate;
}

View File

@@ -1,15 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sot.dto;
import java.util.List;
import lombok.Data;
@Data
public class SotToolResponse {
private String toolName;
private String category;
private String referenceId;
private String status;
private String summary;
private String asOfDate;
private List<String> details;
}

View File

@@ -1,198 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sot.usecase;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.sot.dto.SotToolRequest;
import io.shinhanlife.dat.mcc.biz.sot.dto.SotToolResponse;
import org.springaicommunity.mcp.annotation.McpTool;
public interface SotConsentUseCase {
@McpTool(name = "sot_marketing_consent_status", title = "마케팅 수신동의 현황 조회", description = "마케팅 수신동의 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_MARKETING_CONSENT_STATUS",
functionDescription = "마케팅 수신동의 현황 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 마케팅 수신동의 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "마케팅 수신동의 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"마케팅 수신동의 현황 조회 정보를 보여줘", "마케팅 수신동의 현황 조회 결과를 확인해줘", "현재 마케팅 수신동의 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getMarketingConsentStatus(SotToolRequest request);
@McpTool(name = "sot_marketing_consent_history", title = "마케팅 동의 이력 조회", description = "마케팅 동의 이력 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_MARKETING_CONSENT_HISTORY",
functionDescription = "마케팅 동의 이력 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 마케팅 동의 이력 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "마케팅 동의 이력 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"마케팅 동의 이력 조회 정보를 보여줘", "마케팅 동의 이력 조회 결과를 확인해줘", "현재 마케팅 동의 이력 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getMarketingConsentHistory(SotToolRequest request);
@McpTool(name = "sot_marketing_consent_channel", title = "채널별 마케팅 동의 현황 조회", description = "채널별 마케팅 동의 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_MARKETING_CONSENT_CHANNEL",
functionDescription = "채널별 마케팅 동의 현황 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 채널별 마케팅 동의 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "채널별 마케팅 동의 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"채널별 마케팅 동의 현황 조회 정보를 보여줘", "채널별 마케팅 동의 현황 조회 결과를 확인해줘", "현재 채널별 마케팅 동의 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getMarketingConsentChannel(SotToolRequest request);
@McpTool(name = "sot_subscription_design_consent", title = "가입설계 동의 현황 조회", description = "가입설계 동의 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_SUBSCRIPTION_DESIGN_CONSENT",
functionDescription = "가입설계 동의 현황 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 가입설계 동의 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "가입설계 동의 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"가입설계 동의 현황 조회 정보를 보여줘", "가입설계 동의 현황 조회 결과를 확인해줘", "현재 가입설계 동의 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getSubscriptionDesignConsent(SotToolRequest request);
@McpTool(name = "sot_subscription_design_detail", title = "가입설계 동의 상세 조회", description = "가입설계 동의 상세 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_SUBSCRIPTION_DESIGN_DETAIL",
functionDescription = "가입설계 동의 상세 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 가입설계 동의 상세 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "가입설계 동의 상세 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"가입설계 동의 상세 조회 정보를 보여줘", "가입설계 동의 상세 조회 결과를 확인해줘", "현재 가입설계 동의 상세 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getSubscriptionDesignDetail(SotToolRequest request);
@McpTool(name = "sot_customer_info_consent", title = "고객정보 수집·이용 동의 현황 조회", description = "고객정보 수집·이용 동의 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_CUSTOMER_INFO_CONSENT",
functionDescription = "고객정보 수집·이용 동의 현황 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 고객정보 수집·이용 동의 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "고객정보 수집·이용 동의 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"고객정보 수집·이용 동의 현황 조회 정보를 보여줘", "고객정보 수집·이용 동의 현황 조회 결과를 확인해줘", "현재 고객정보 수집·이용 동의 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getCustomerInfoConsent(SotToolRequest request);
@McpTool(name = "sot_customer_info_consent_scope", title = "고객정보 동의 범위 조회", description = "고객정보 동의 범위 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_CUSTOMER_INFO_CONSENT_SCOPE",
functionDescription = "고객정보 동의 범위 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 고객정보 동의 범위 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "고객정보 동의 범위 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"고객정보 동의 범위 조회 정보를 보여줘", "고객정보 동의 범위 조회 결과를 확인해줘", "현재 고객정보 동의 범위 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getCustomerInfoConsentScope(SotToolRequest request);
@McpTool(name = "sot_consent_expiry", title = "동의 유효기간 만료 현황 조회", description = "동의 유효기간 만료 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_CONSENT_EXPIRY",
functionDescription = "동의 유효기간 만료 현황 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 동의 유효기간 만료 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "동의 유효기간 만료 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"동의 유효기간 만료 현황 조회 정보를 보여줘", "동의 유효기간 만료 현황 조회 결과를 확인해줘", "현재 동의 유효기간 만료 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getConsentExpiry(SotToolRequest request);
@McpTool(name = "sot_consent_withdrawal", title = "동의 철회 이력 조회", description = "동의 철회 이력 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_CONSENT_WITHDRAWAL",
functionDescription = "동의 철회 이력 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 동의 철회 이력 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "동의 철회 이력 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"동의 철회 이력 조회 정보를 보여줘", "동의 철회 이력 조회 결과를 확인해줘", "현재 동의 철회 이력 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getConsentWithdrawal(SotToolRequest request);
@McpTool(name = "sot_tm_call_eligibility", title = "텔레마케팅 콜 가능여부 종합 조회", description = "텔레마케팅 콜 가능여부 종합 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "sot",
mappingId = "DIRECT_SOT_TM_CALL_ELIGIBILITY",
functionDescription = "텔레마케팅 콜 가능여부 종합 조회 정보를 조회합니다.",
whenToUse = "텔레마케팅 동의 업무에서 텔레마케팅 콜 가능여부 종합 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "텔레마케팅 콜 가능여부 종합 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"텔레마케팅 콜 가능여부 종합 조회 정보를 보여줘", "텔레마케팅 콜 가능여부 종합 조회 결과를 확인해줘", "현재 텔레마케팅 콜 가능여부 종합 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"sot", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SotToolResponse getTmCallEligibility(SotToolRequest request);
}

View File

@@ -1,77 +0,0 @@
package io.shinhanlife.dat.mcc.biz.sot.usecase.impl;
import io.shinhanlife.dat.mcc.biz.sot.dto.SotToolRequest;
import io.shinhanlife.dat.mcc.biz.sot.dto.SotToolResponse;
import io.shinhanlife.dat.mcc.biz.sot.usecase.SotConsentUseCase;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class SotConsentUseCaseImpl implements SotConsentUseCase {
@Override
public SotToolResponse getMarketingConsentStatus(SotToolRequest request) {
return mockResponse(request, "sot_marketing_consent_status", "마케팅 수신동의 현황 조회");
}
@Override
public SotToolResponse getMarketingConsentHistory(SotToolRequest request) {
return mockResponse(request, "sot_marketing_consent_history", "마케팅 동의 이력 조회");
}
@Override
public SotToolResponse getMarketingConsentChannel(SotToolRequest request) {
return mockResponse(request, "sot_marketing_consent_channel", "채널별 마케팅 동의 현황 조회");
}
@Override
public SotToolResponse getSubscriptionDesignConsent(SotToolRequest request) {
return mockResponse(request, "sot_subscription_design_consent", "가입설계 동의 현황 조회");
}
@Override
public SotToolResponse getSubscriptionDesignDetail(SotToolRequest request) {
return mockResponse(request, "sot_subscription_design_detail", "가입설계 동의 상세 조회");
}
@Override
public SotToolResponse getCustomerInfoConsent(SotToolRequest request) {
return mockResponse(request, "sot_customer_info_consent", "고객정보 수집·이용 동의 현황 조회");
}
@Override
public SotToolResponse getCustomerInfoConsentScope(SotToolRequest request) {
return mockResponse(request, "sot_customer_info_consent_scope", "고객정보 동의 범위 조회");
}
@Override
public SotToolResponse getConsentExpiry(SotToolRequest request) {
return mockResponse(request, "sot_consent_expiry", "동의 유효기간 만료 현황 조회");
}
@Override
public SotToolResponse getConsentWithdrawal(SotToolRequest request) {
return mockResponse(request, "sot_consent_withdrawal", "동의 철회 이력 조회");
}
@Override
public SotToolResponse getTmCallEligibility(SotToolRequest request) {
return mockResponse(request, "sot_tm_call_eligibility", "텔레마케팅 콜 가능여부 종합 조회");
}
private SotToolResponse mockResponse(SotToolRequest request, String toolName, String title) {
SotToolResponse response = new SotToolResponse();
response.setToolName(toolName);
response.setCategory("SOT");
response.setReferenceId(request != null && hasText(request.getCustomerId()) ? request.getCustomerId()
: request != null && hasText(request.getContractId()) ? request.getContractId() : "SOT-000001");
response.setStatus("정상");
response.setSummary(title + " 결과");
response.setAsOfDate(request != null && hasText(request.getQueryDate()) ? request.getQueryDate() : "2026-08-14");
response.setDetails(List.of(title + " 모의 상세정보", "외부 시스템을 변경하지 않는 조회 결과"));
return response;
}
private boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@@ -1,20 +0,0 @@
package io.shinhanlife.dat.mcc.biz.spr.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springaicommunity.mcp.annotation.McpToolParam;
@Data
public class SprToolRequest {
@McpToolParam(description = "현장문의번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String inquiryId;
@McpToolParam(description = "설계사번호", required = false)
@Schema(pattern = "^[A-Za-z0-9_-]{3,30}$")
private String agentId;
@McpToolParam(description = "조회 기준일(YYYY-MM-DD)", required = false)
@Schema(pattern = "^\\d{4}-\\d{2}-\\d{2}$")
private String queryDate;
}

View File

@@ -1,15 +0,0 @@
package io.shinhanlife.dat.mcc.biz.spr.dto;
import java.util.List;
import lombok.Data;
@Data
public class SprToolResponse {
private String toolName;
private String category;
private String referenceId;
private String status;
private String summary;
private String asOfDate;
private List<String> details;
}

View File

@@ -1,198 +0,0 @@
package io.shinhanlife.dat.mcc.biz.spr.usecase;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.spr.dto.SprToolRequest;
import io.shinhanlife.dat.mcc.biz.spr.dto.SprToolResponse;
import org.springaicommunity.mcp.annotation.McpTool;
public interface SprFieldInquiryUseCase {
@McpTool(name = "spr_field_inquiry_list", title = "GA현장문의 목록 조회", description = "GA현장문의 목록 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_LIST",
functionDescription = "GA현장문의 목록 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 GA현장문의 목록 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "GA현장문의 목록 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"GA현장문의 목록 조회 정보를 보여줘", "GA현장문의 목록 조회 결과를 확인해줘", "현재 GA현장문의 목록 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquiryList(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_detail", title = "GA현장문의 상세 조회", description = "GA현장문의 상세 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_DETAIL",
functionDescription = "GA현장문의 상세 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 GA현장문의 상세 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "GA현장문의 상세 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"GA현장문의 상세 조회 정보를 보여줘", "GA현장문의 상세 조회 결과를 확인해줘", "현재 GA현장문의 상세 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquiryDetail(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_status", title = "문의 처리상태 조회", description = "문의 처리상태 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_STATUS",
functionDescription = "문의 처리상태 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 문의 처리상태 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "문의 처리상태 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"문의 처리상태 조회 정보를 보여줘", "문의 처리상태 조회 결과를 확인해줘", "현재 문의 처리상태 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquiryStatus(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_category", title = "문의 유형별 통계 조회", description = "문의 유형별 통계 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_CATEGORY",
functionDescription = "문의 유형별 통계 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 문의 유형별 통계 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "문의 유형별 통계 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"문의 유형별 통계 조회 정보를 보여줘", "문의 유형별 통계 조회 결과를 확인해줘", "현재 문의 유형별 통계 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquiryCategory(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_answer", title = "문의 답변 조회", description = "문의 답변 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_ANSWER",
functionDescription = "문의 답변 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 문의 답변 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "문의 답변 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"문의 답변 조회 정보를 보여줘", "문의 답변 조회 결과를 확인해줘", "현재 문의 답변 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquiryAnswer(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_escalation", title = "에스컬레이션 현황 조회", description = "에스컬레이션 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_ESCALATION",
functionDescription = "에스컬레이션 현황 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 에스컬레이션 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "에스컬레이션 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"에스컬레이션 현황 조회 정보를 보여줘", "에스컬레이션 현황 조회 결과를 확인해줘", "현재 에스컬레이션 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquiryEscalation(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_faq", title = "자주묻는질문 FAQ 조회", description = "자주묻는질문 FAQ 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_FAQ",
functionDescription = "자주묻는질문 FAQ 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 자주묻는질문 FAQ 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "자주묻는질문 FAQ 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"자주묻는질문 FAQ 조회 정보를 보여줘", "자주묻는질문 FAQ 조회 결과를 확인해줘", "현재 자주묻는질문 FAQ 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquiryFaq(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_manager", title = "담당자 배정 현황 조회", description = "담당자 배정 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_MANAGER",
functionDescription = "담당자 배정 현황 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 담당자 배정 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "담당자 배정 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"담당자 배정 현황 조회 정보를 보여줘", "담당자 배정 현황 조회 결과를 확인해줘", "현재 담당자 배정 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquiryManager(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_sla", title = "처리기한 SLA 현황 조회", description = "처리기한 SLA 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_SLA",
functionDescription = "처리기한 SLA 현황 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 처리기한 SLA 현황 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "처리기한 SLA 현황 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"처리기한 SLA 현황 조회 정보를 보여줘", "처리기한 SLA 현황 조회 결과를 확인해줘", "현재 처리기한 SLA 현황 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquirySla(SprToolRequest request);
@McpTool(name = "spr_field_inquiry_satisfaction", title = "문의 만족도 조사 결과 조회", description = "문의 만족도 조사 결과 조회 정보를 안전한 모의 데이터로 제공합니다.",
annotations = @McpTool.McpAnnotations(openWorldHint = false))
@GrowToolHint(
requiresApproval = false,
categoryKey = "spr",
mappingId = "DIRECT_SPR_FIELD_INQUIRY_SATISFACTION",
functionDescription = "문의 만족도 조사 결과 조회 정보를 조회합니다.",
whenToUse = "GA현장지원 업무에서 문의 만족도 조사 결과 조회 정보가 필요할 때 사용합니다.",
whenNotToUse = "정보 변경, 승인 또는 실제 업무처리에는 사용하지 않습니다.",
ioLimits = "입력 식별자에 대한 모의 조회 데이터만 반환하며 외부 시스템을 변경하지 않습니다.",
displayDescription = "문의 만족도 조사 결과 조회 정보를 안전한 모의 데이터로 제공합니다.",
exampleQueries = {"문의 만족도 조사 결과 조회 정보를 보여줘", "문의 만족도 조사 결과 조회 결과를 확인해줘", "현재 문의 만족도 조사 결과 조회 내용을 알려줘"},
destructive = false,
idempotent = true,
tags = {"spr", "조회", "mock"},
ownerOrg = "MCP_TOOL"
)
SprToolResponse getFieldInquirySatisfaction(SprToolRequest request);
}

View File

@@ -1,77 +0,0 @@
package io.shinhanlife.dat.mcc.biz.spr.usecase.impl;
import io.shinhanlife.dat.mcc.biz.spr.dto.SprToolRequest;
import io.shinhanlife.dat.mcc.biz.spr.dto.SprToolResponse;
import io.shinhanlife.dat.mcc.biz.spr.usecase.SprFieldInquiryUseCase;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class SprFieldInquiryUseCaseImpl implements SprFieldInquiryUseCase {
@Override
public SprToolResponse getFieldInquiryList(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_list", "GA현장문의 목록 조회");
}
@Override
public SprToolResponse getFieldInquiryDetail(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_detail", "GA현장문의 상세 조회");
}
@Override
public SprToolResponse getFieldInquiryStatus(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_status", "문의 처리상태 조회");
}
@Override
public SprToolResponse getFieldInquiryCategory(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_category", "문의 유형별 통계 조회");
}
@Override
public SprToolResponse getFieldInquiryAnswer(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_answer", "문의 답변 조회");
}
@Override
public SprToolResponse getFieldInquiryEscalation(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_escalation", "에스컬레이션 현황 조회");
}
@Override
public SprToolResponse getFieldInquiryFaq(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_faq", "자주묻는질문 FAQ 조회");
}
@Override
public SprToolResponse getFieldInquiryManager(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_manager", "담당자 배정 현황 조회");
}
@Override
public SprToolResponse getFieldInquirySla(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_sla", "처리기한 SLA 현황 조회");
}
@Override
public SprToolResponse getFieldInquirySatisfaction(SprToolRequest request) {
return mockResponse(request, "spr_field_inquiry_satisfaction", "문의 만족도 조사 결과 조회");
}
private SprToolResponse mockResponse(SprToolRequest request, String toolName, String title) {
SprToolResponse response = new SprToolResponse();
response.setToolName(toolName);
response.setCategory("SPR");
response.setReferenceId(request != null && hasText(request.getInquiryId()) ? request.getInquiryId()
: request != null && hasText(request.getAgentId()) ? request.getAgentId() : "SPR-000001");
response.setStatus("정상");
response.setSummary(title + " 결과");
response.setAsOfDate(request != null && hasText(request.getQueryDate()) ? request.getQueryDate() : "2026-08-14");
response.setDetails(List.of(title + " 모의 상세정보", "외부 시스템을 변경하지 않는 조회 결과"));
return response;
}
private boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@@ -1,17 +0,0 @@
package io.shinhanlife.dat.mcc.infra.itrf.http.memo;
import io.shinhanlife.dat.lib.integration.http.component.AxhubHttpComponent;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class MemoClient {
private static final String API_NAME = "memo";
private final AxhubHttpComponent http;
public <I, O> O call(I request, Class<O> responseType) {
return http.call(API_NAME, request, responseType);
}
}

View File

@@ -1,16 +0,0 @@
package io.shinhanlife.dat.mcc.infra.itrf.http.memo.io;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MemoListRetrieverHttpRequest {
@Schema(description = "조회할 의뢰서 상태", example = "OPEN", requiredMode = Schema.RequiredMode.REQUIRED)
private String memoStatus;
@Schema(description = "검색 키워드", example = "프로젝트", requiredMode = Schema.RequiredMode.REQUIRED)
private String searchKeyword;
}

View File

@@ -1,13 +0,0 @@
package io.shinhanlife.dat.mcc.infra.itrf.http.memo.io;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MemoListRetrieverHttpResponse {
private String resultCode;
private String resultMessage;
}

View File

@@ -1,30 +0,0 @@
package io.shinhanlife.dat.mcc.infra.itrf.mci.ncla;
import org.springframework.stereotype.Component;
import lombok.RequiredArgsConstructor;
import io.shinhanlife.dat.lib.integration.mci.component.AxhubMciComponent;
import io.shinhanlife.glow.communication.dto.Transfer;
/**
* @package io.shinhanlife.dat.mcc.infra.itrf.mci.ncla
* @className MciNclaClient
* @description AX HUB 시스템 처리 클래스
* @author jade
* @create 2026.08.10
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.08.10 jade 최초생성
*
* </pre>
*/
@Component
@RequiredArgsConstructor
public class MciNclaClient {
private final AxhubMciComponent mci;
public <O> Transfer<O> callTo(String interfaceId, String dummy, Object mciReq, Class<O> resType) {
return mci.callTo(interfaceId, dummy, mciReq, resType);
}
}

View File

@@ -1,14 +0,0 @@
package io.shinhanlife.dat.mcc.infra.itrf.mci.ncla.io;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class CLCNNB00001_I {
@Schema(description = "보험금 청구번호", example = "CLM202608100001", requiredMode = Schema.RequiredMode.REQUIRED)
private String claimNo;
@Schema(description = "보험 계약번호", example = "10023456789")
private String contractNo;
}

View File

@@ -1,17 +0,0 @@
package io.shinhanlife.dat.mcc.infra.itrf.mci.ncla.io;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class CLCNNB00001_O {
@Schema(description = "청구 처리 상태 코드", example = "RECEIVED", requiredMode = Schema.RequiredMode.REQUIRED)
private String status;
@Schema(description = "청구 처리 상태명", example = "접수", requiredMode = Schema.RequiredMode.REQUIRED)
private String statusLabel;
@Schema(description = "승인 금액", example = "150000")
private Long approvedAmount;
}

View File

@@ -1,31 +1,27 @@
package io.shinhanlife.dat.mcc.sal;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.cache.annotation.EnableCaching;
/**
* @package io.shinhanlife.dat.mcc.sal
* @className DatWasSalApplication
* @description AX HUB 시스템 처리 클래스
* @author 0986406
* @create 2026.09.01
* @author jade
* @create 2026.09.08
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.09.01 0986406 최초생성
*
* 2026.09.08 jade 최초생성
*
* </pre>
*/
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Import;
import io.shinhanlife.dat.lib.mcp.ToolMcpServerConfiguration;
@SpringBootApplication(scanBasePackages = {"io.shinhanlife.dat.mcc", "io.shinhanlife.dat.lib"})
@ConfigurationPropertiesScan(basePackages = {"io.shinhanlife.dat.mcc", "io.shinhanlife.dat.lib"})
@EnableCaching
@Import(ToolMcpServerConfiguration.class)
public class DatWasSalApplication {
public static void main(String[] args) {
SpringApplication.run(DatWasSalApplication.class, args);

View File

@@ -1,15 +1,11 @@
# OCI 클라우드 개발 환경 전용 설정
server:
port: ${PORT:8082}
axhub:
gateway:
url: https://axhubmcp.devjun.net
port: ${PORT:8083}
spring:
config:
activate:
on-profile: dev
import:
- classpath:application-core-dev.yml
- classpath:glow/application-glow.yml
- classpath:glow/application-glow-dev.yml

View File

@@ -1,4 +1,3 @@
# Local 환경 전용 설정 (H2 메모리 DB 등)
spring:
config:
activate:
@@ -6,7 +5,3 @@ spring:
import:
- classpath:glow/application-glow.yml
- classpath:glow/application-glow-local.yml
axhub:
tool:
url: ${AXHUB_TOOL_URL:http://localhost:${server.port}}

View File

@@ -1,16 +1,11 @@
server:
port: ${PORT:8082}
port: ${PORT:8083}
spring:
config:
activate:
on-profile: prod
import:
- classpath:application-core-prod.yml
- classpath:glow/application-glow.yml
- classpath:glow/application-glow-prod.yml
axhub:
gateway:
url: ${AXHUB_GATEWAY_URL}
tool:
url: ${AXHUB_TOOL_URL}

View File

@@ -1,16 +1,11 @@
server:
port: ${PORT:8082}
port: ${PORT:8083}
spring:
config:
activate:
on-profile: test
import:
- classpath:application-core-test.yml
- classpath:glow/application-glow.yml
- classpath:glow/application-glow-test.yml
axhub:
gateway:
url: ${AXHUB_GATEWAY_URL}
tool:
url: ${AXHUB_TOOL_URL}

View File

@@ -1,5 +1,5 @@
server:
port: 8082
port: 8083
spring:
application:
name: dat-was-sal
@@ -13,8 +13,7 @@ logging:
mcp:
namespace: ""
manifest:
bundle-id: was-sal
# Set the AA-assigned prefix before MCP pull activation (for example: sal.).
bundle-id: dat-was-sal
name-prefix: ""
security:
api-key: ${TOOL_SERVER_API_KEY:tool-server-key}

View File

@@ -1,41 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 1. 로그 패턴 설정 (MDC traceId 포함) -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n" />
<!-- 2. 콘솔(Console) 출력 설정 (로컬 개발용) -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 3. 파일(File) 출력 설정 (서버 운영용) -->
<!-- Logback에서 시스템 Hostname을 가져오기 위한 설정 -->
<property name="HOSTNAME" value="${HOSTNAME}" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/swlog/dat-was-sal/A01/${HOSTNAME}_A01.log</file> <!-- 현재 로그가 쌓이는 파일 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 매일 자정에 날짜를 붙여서 지난 로그를 분리 저장 -->
<fileNamePattern>/swlog/dat-was-sal/A01/${HOSTNAME}_A01_%d{yyyyMMdd}.%i.log</fileNamePattern>
<!-- 개별 로그 파일 크기를 100MB로 제한하고, 전체 보관 일수는 30일, 총 로그 누적 용량은 1GB로 제한 -->
<maxFileSize>100MB</maxFileSize>
<file>logs/dat-was-sal.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/dat-was-sal-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 4. 기본 로깅 레벨 설정 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<!-- 5. 우리 프로젝트 패키지는 디버그 레벨까지 상세히 보기 -->
<logger name="io.shinhanlife" level="DEBUG" />
</configuration>

View File

@@ -1,3 +0,0 @@
{
"resultCode": "SUCCESS"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_contract_review_document\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"계약심사 제출서류 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"계약심사 제출서류 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_contract_review_history\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"계약심사 이력 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"계약심사 이력 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_contract_review_result\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"계약심사 결과 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"계약심사 결과 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_contract_review_status\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"계약심사 진행상태 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"계약심사 진행상태 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_product_coverage\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"상품 보장내용 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"상품 보장내용 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_product_info\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"상품 정보 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"상품 정보 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_product_premium_table\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"상품 보험료 요율표 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"상품 보험료 요율표 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_underwriting_additional_request\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"언더라이팅 추가자료 요청 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"언더라이팅 추가자료 요청 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_underwriting_result\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"언더라이팅 인수심사 결과 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"언더라이팅 인수심사 결과 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"lic_underwriting_risk_grade\",\"category\":\"LIC\",\"referenceId\":\"LIC-000001\",\"status\":\"정상\",\"summary\":\"언더라이팅 위험등급 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"언더라이팅 위험등급 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,5 +0,0 @@
{
"status" : "RECEIVED",
"statusLabel" : "접수",
"approvedAmount" : 150000
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_activity_calendar\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"활동 일정 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"활동 일정 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_activity_daily\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"GA 일별 활동 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"GA 일별 활동 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_activity_report_status\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"활동일지 제출 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"활동일지 제출 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_activity_summary\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"GA 활동 종합 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"GA 활동 종합 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_call_activity\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"콜 활동 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"콜 활동 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_customer_consulting\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"고객 상담 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"고객 상담 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_field_support_request\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"현장 지원 요청 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"현장 지원 요청 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_prospect_list\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"신규 발굴 고객 목록 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"신규 발굴 고객 목록 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_training_completion\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"교육 이수 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"교육 이수 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sof_visit_count\",\"category\":\"SOF\",\"referenceId\":\"SOF-000001\",\"status\":\"정상\",\"summary\":\"고객 방문 건수 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"고객 방문 건수 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_incentive_summary\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"영업 인센티브 요약 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"영업 인센티브 요약 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_monthly_performance\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"GA 월별 실적 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"GA 월별 실적 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_new_contract_count\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"신계약 건수 실적 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"신계약 건수 실적 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_performance_comparison\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"전년 동기 대비 실적 비교 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"전년 동기 대비 실적 비교 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_premium_performance\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"보험료 실적 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"보험료 실적 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_product_performance\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"상품별 실적 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"상품별 실적 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_sales_ranking\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"GA 영업 순위 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"GA 영업 순위 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_target_history\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"영업목표 변경 이력 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"영업목표 변경 이력 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_target_progress\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"영업목표 달성률 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"영업목표 달성률 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sog_target_summary\",\"category\":\"SOG\",\"referenceId\":\"SOG-000001\",\"status\":\"정상\",\"summary\":\"GA 개인별 영업목표 요약 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"GA 개인별 영업목표 요약 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_consent_expiry\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"동의 유효기간 만료 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"동의 유효기간 만료 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_consent_withdrawal\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"동의 철회 이력 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"동의 철회 이력 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_customer_info_consent\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"고객정보 수집·이용 동의 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"고객정보 수집·이용 동의 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_customer_info_consent_scope\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"고객정보 동의 범위 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"고객정보 동의 범위 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_marketing_consent_channel\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"채널별 마케팅 동의 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"채널별 마케팅 동의 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_marketing_consent_history\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"마케팅 동의 이력 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"마케팅 동의 이력 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_marketing_consent_status\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"마케팅 수신동의 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"마케팅 수신동의 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_subscription_design_consent\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"가입설계 동의 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"가입설계 동의 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_subscription_design_detail\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"가입설계 동의 상세 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"가입설계 동의 상세 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"sot_tm_call_eligibility\",\"category\":\"SOT\",\"referenceId\":\"SOT-000001\",\"status\":\"정상\",\"summary\":\"텔레마케팅 콜 가능여부 종합 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"텔레마케팅 콜 가능여부 종합 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_answer\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"문의 답변 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"문의 답변 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_category\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"문의 유형별 통계 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"문의 유형별 통계 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_detail\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"GA현장문의 상세 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"GA현장문의 상세 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_escalation\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"에스컬레이션 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"에스컬레이션 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_faq\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"자주묻는질문 FAQ 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"자주묻는질문 FAQ 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_list\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"GA현장문의 목록 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"GA현장문의 목록 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_manager\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"담당자 배정 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"담당자 배정 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_satisfaction\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"문의 만족도 조사 결과 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"문의 만족도 조사 결과 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_sla\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"처리기한 SLA 현황 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"처리기한 SLA 현황 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,4 +0,0 @@
{
"resultCode": "SUCCESS",
"data": "{\"toolName\":\"spr_field_inquiry_status\",\"category\":\"SPR\",\"referenceId\":\"SPR-000001\",\"status\":\"정상\",\"summary\":\"문의 처리상태 조회 결과\",\"asOfDate\":\"2026-08-14\",\"details\":[\"문의 처리상태 조회 모의 상세정보\",\"외부 시스템을 변경하지 않는 조회 결과\"]}"
}

View File

@@ -1,11 +0,0 @@
{
"type": "object",
"additionalProperties": false,
"properties": {
"TODO_FIELD": {
"type": "string",
"description": "TODO: 파라미터 설명을 입력하세요."
}
},
"required": []
}

View File

@@ -1,16 +0,0 @@
{
"type": "object",
"additionalProperties": false,
"properties": {
"status": {
"type": "string",
"description": "처리 결과 상태 (SUCCESS / FAILURE)",
"enum": ["SUCCESS", "FAILURE"]
},
"message": {
"type": "string",
"description": "처리 결과 메시지"
}
},
"required": ["status"]
}

View File

@@ -1,16 +1,22 @@
---
mcp:
manifest:
routing-functions:
- name: route_to_dat-was-sal
description-serialization: 영업 업무 서버로 요청을 라우팅합니다. 영업 조직과 설계사 업무를 처리합니다. 요청의 주요 엔티티와 업무 영역을 기준으로 영업 서버를 선택합니다.
server-id: dat-was-sal
category-key: sal
product-boundary: insurance
business-domain: 영업 관리
business-outcome: 영업 조직 설계사 업무를 처리합니다.
primary-entities: [설계사, 영업조직, 실적]
capabilities: [설계사 조회, 영업조직 조회, 실적 조회]
select-if: 설계사, 영업조직 또는 영업실적 관련 요청인 경우
reject-if: 고객, 계약, 상품, 시스템 운영 업무가 주된 요청인 경우
confusable-servers: [dat-was-cus, dat-was-pro, dat-was-sys]
decision-policy: 요청의 주요 엔티티와 업무 영역을 기준으로 영업 서버를 선택합니다.
- name: "route_to_dat-was-sal"
server-id: "dat-was-sal"
category-key: "sal"
product-boundary: "영업 업무 서버를 위한 제품 범위 정의입니다."
business-domain: "영업 조직 및 설계사 관리 도메인입니다."
business-outcome: "영업 요청의 효율적인 처리와 설계사 업무 지원을 보장합니다."
primary-entities: "영업 조직, 설계사, 고객"
capabilities: "요청 라우팅, 업무 할당, 상태 조회"
select-if: "요청의 주요 엔티티가 영업 조직 또는 설계사일 경우 선택합니다."
reject-if: "요청이 다른 도메인에 속하거나 유효하지 않은 엔티티를 포함할 경우 거부합니다."
confusable-servers:
- "dat-was-cus"
- "dat-was-ehr"
- "dat-was-pro"
- "dat-was-sys"
decision-policy: "가장 가까운 영업 서버를 선택하고, 부하를 고려하여 결정합니다."
description_serialization: "이 도구는 영업 요청을 처리하며, 영업 조직과 설계사 업무를 효율적으로 라우팅하고, 부\
하를 고려한 결정 정책을 적용하여 적절한 서버로 분배합니다."

Some files were not shown because too many files have changed in this diff Show More