korean-stats-mcp 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +301 -0
- package/dist/api/client.d.ts +65 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +143 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/types.d.ts +157 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +5 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cache/index.d.ts +55 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +102 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/config/index.d.ts +46 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +54 -0
- package/dist/config/index.js.map +1 -0
- package/dist/data/quickStatsParams.d.ts +76 -0
- package/dist/data/quickStatsParams.d.ts.map +1 -0
- package/dist/data/quickStatsParams.js +1344 -0
- package/dist/data/quickStatsParams.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +5 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +5 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/statisticsAssistant.d.ts +25 -0
- package/dist/prompts/statisticsAssistant.d.ts.map +1 -0
- package/dist/prompts/statisticsAssistant.js +43 -0
- package/dist/prompts/statisticsAssistant.js.map +1 -0
- package/dist/resources/categoryTree.d.ts +18 -0
- package/dist/resources/categoryTree.d.ts.map +1 -0
- package/dist/resources/categoryTree.js +80 -0
- package/dist/resources/categoryTree.js.map +1 -0
- package/dist/resources/index.d.ts +6 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +6 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/keyIndicators.d.ts +20 -0
- package/dist/resources/keyIndicators.d.ts.map +1 -0
- package/dist/resources/keyIndicators.js +108 -0
- package/dist/resources/keyIndicators.js.map +1 -0
- package/dist/server-http.d.ts +10 -0
- package/dist/server-http.d.ts.map +1 -0
- package/dist/server-http.js +134 -0
- package/dist/server-http.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +194 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analyzeTimeSeries.d.ts +70 -0
- package/dist/tools/analyzeTimeSeries.d.ts.map +1 -0
- package/dist/tools/analyzeTimeSeries.js +204 -0
- package/dist/tools/analyzeTimeSeries.js.map +1 -0
- package/dist/tools/chains.d.ts +197 -0
- package/dist/tools/chains.d.ts.map +1 -0
- package/dist/tools/chains.js +369 -0
- package/dist/tools/chains.js.map +1 -0
- package/dist/tools/compareStatistics.d.ts +62 -0
- package/dist/tools/compareStatistics.d.ts.map +1 -0
- package/dist/tools/compareStatistics.js +190 -0
- package/dist/tools/compareStatistics.js.map +1 -0
- package/dist/tools/fetchKosisExcel.d.ts +62 -0
- package/dist/tools/fetchKosisExcel.d.ts.map +1 -0
- package/dist/tools/fetchKosisExcel.js +366 -0
- package/dist/tools/fetchKosisExcel.js.map +1 -0
- package/dist/tools/getRecommendedStats.d.ts +41 -0
- package/dist/tools/getRecommendedStats.d.ts.map +1 -0
- package/dist/tools/getRecommendedStats.js +251 -0
- package/dist/tools/getRecommendedStats.js.map +1 -0
- package/dist/tools/getStatisticsData.d.ts +75 -0
- package/dist/tools/getStatisticsData.d.ts.map +1 -0
- package/dist/tools/getStatisticsData.js +305 -0
- package/dist/tools/getStatisticsData.js.map +1 -0
- package/dist/tools/getStatisticsList.d.ts +69 -0
- package/dist/tools/getStatisticsList.d.ts.map +1 -0
- package/dist/tools/getStatisticsList.js +336 -0
- package/dist/tools/getStatisticsList.js.map +1 -0
- package/dist/tools/getTableInfo.d.ts +66 -0
- package/dist/tools/getTableInfo.d.ts.map +1 -0
- package/dist/tools/getTableInfo.js +85 -0
- package/dist/tools/getTableInfo.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +19 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/quickStats.d.ts +71 -0
- package/dist/tools/quickStats.d.ts.map +1 -0
- package/dist/tools/quickStats.js +490 -0
- package/dist/tools/quickStats.js.map +1 -0
- package/dist/tools/quickTrend.d.ts +61 -0
- package/dist/tools/quickTrend.d.ts.map +1 -0
- package/dist/tools/quickTrend.js +328 -0
- package/dist/tools/quickTrend.js.map +1 -0
- package/dist/tools/searchStatistics.d.ts +41 -0
- package/dist/tools/searchStatistics.d.ts.map +1 -0
- package/dist/tools/searchStatistics.js +318 -0
- package/dist/tools/searchStatistics.js.map +1 -0
- package/dist/utils/dataFormatter.d.ts +40 -0
- package/dist/utils/dataFormatter.d.ts.map +1 -0
- package/dist/utils/dataFormatter.js +142 -0
- package/dist/utils/dataFormatter.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +33 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +94 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/metaLookup.d.ts +93 -0
- package/dist/utils/metaLookup.d.ts.map +1 -0
- package/dist/utils/metaLookup.js +170 -0
- package/dist/utils/metaLookup.js.map +1 -0
- package/dist/utils/queryParser.d.ts +45 -0
- package/dist/utils/queryParser.d.ts.map +1 -0
- package/dist/utils/queryParser.js +244 -0
- package/dist/utils/queryParser.js.map +1 -0
- package/dist/utils/regions.d.ts +70 -0
- package/dist/utils/regions.d.ts.map +1 -0
- package/dist/utils/regions.js +261 -0
- package/dist/utils/regions.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 통계 데이터 조회 도구
|
|
3
|
+
* 특정 통계표의 실제 데이터를 조회
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { getKosisClient } from '../api/client.js';
|
|
7
|
+
import { getCacheManager } from '../cache/index.js';
|
|
8
|
+
import { simplifyStatisticsData, recommendVisualization } from '../utils/dataFormatter.js';
|
|
9
|
+
import { resolveDimensions, summarizeTableMeta } from '../utils/metaLookup.js';
|
|
10
|
+
export const getStatisticsDataSchema = {
|
|
11
|
+
name: 'get_statistics_data',
|
|
12
|
+
description: `[직접조회] 특정 통계표의 실제 데이터를 조회. orgId+tableId 필수.
|
|
13
|
+
|
|
14
|
+
🔄 도구 라우팅:
|
|
15
|
+
• 자연어/키워드(예: "서울 인구") → quick_stats가 우선
|
|
16
|
+
• 시계열(추세/추이) → quick_trend
|
|
17
|
+
• 통계표 ID를 모르면 → search_statistics
|
|
18
|
+
• 차원·항목 코드 확인 → get_table_info
|
|
19
|
+
|
|
20
|
+
자동 메타 lookup 지원:
|
|
21
|
+
• regionName="광진구" 처럼 자치구·시·군 이름을 주면 objL1·objL2가 자동으로 채워집니다 (시군구별/자치구별/구군별/행정구역별 OBJ에서 매칭).
|
|
22
|
+
• itemName으로 항목명 매칭도 가능 (예: "여자", "65세이상").
|
|
23
|
+
• objL1·itemId를 직접 넣으면 lookup 없이 그 값 사용.
|
|
24
|
+
|
|
25
|
+
자치구·시·군 통계 조회 경로 (광역시도별로 패턴이 다름):
|
|
26
|
+
|
|
27
|
+
【Path A — 광역시도 기본통계 시리즈】 가장 일반적
|
|
28
|
+
• 서울: orgId=201, tblId=DT_201004_* (예: DT_201004_O110054 보육시설)
|
|
29
|
+
• 부산: orgId=202, tblId=DT_xxx (예: DT_202 구·군별 세대 및 등록인구)
|
|
30
|
+
• 대구: orgId=203, tblId=DT_Bxxxxx (예: DT_B40001 구군별 세대 및 등록인구)
|
|
31
|
+
• 인천 이하: 자치구별 [구군별]/[행정구역별] 분류에 ITM_NM으로 자치구가 들어있음
|
|
32
|
+
• 광역시도별 LIST_ID 패턴이 다르므로, search_statistics 로 표 ID 먼저 확인
|
|
33
|
+
|
|
34
|
+
【Path B — 자치구 단독 OpenAPI 시리즈】 챕터별 세분화 통계
|
|
35
|
+
• orgId=5xx (자치구 코드), tblId=DT_<자치구코드>0?_<챕터><번호>
|
|
36
|
+
• 예: 해운대구 orgId=539, tblId=DT_53902_B001003 (인구추이)
|
|
37
|
+
• 예: 수성구 orgId=556, tblId=DT_55601_B001003 (인구추이)
|
|
38
|
+
• regionName 없이 그대로 조회 (이미 자치구 한정 표)
|
|
39
|
+
|
|
40
|
+
【Path C — 통계청 e-지방지표 (orgId=101)】 256개 행정구역 통합
|
|
41
|
+
• DT_1YLxxxxx 시리즈 (예: DT_1YL15001 학급당 학생수)
|
|
42
|
+
• regionName="수성구" / "해운대구" 등 모든 시군구가 [행정구역별] 분류에 들어있음
|
|
43
|
+
• 광역시도 기본통계가 미비할 때 가장 광범위한 폴백
|
|
44
|
+
|
|
45
|
+
ITM_ID는 통계표마다 다른 코드 체계를 쓰므로(예: "001005", "1520213102303231A.09", "22060"), 직접 입력 대신 regionName/itemName 사용을 권장합니다.
|
|
46
|
+
|
|
47
|
+
「OO광역시도 OO구 기본통계」 컨테이너 LIST_ID(예: 201_201A_505_50501)는 직접 조회하지 말 것 — TBL_ID가 아님.`,
|
|
48
|
+
inputSchema: z.object({
|
|
49
|
+
orgId: z.string().describe('기관 ID (예: 201 = 서울특별시)'),
|
|
50
|
+
tableId: z.string().describe('통계표 ID (예: DT_201004_O110054)'),
|
|
51
|
+
regionName: z
|
|
52
|
+
.string()
|
|
53
|
+
.optional()
|
|
54
|
+
.describe('자치구·시·군 이름 (예: "광진구", "수성구"). 주어지면 objL1/objL2 자동 lookup. 전국·합계는 비워둠.'),
|
|
55
|
+
itemName: z
|
|
56
|
+
.string()
|
|
57
|
+
.optional()
|
|
58
|
+
.describe('항목 이름 (예: "여자", "총인구"). 주어지면 itemId 자동 lookup. 보통 통계표 항목이 하나면 생략.'),
|
|
59
|
+
objL1: z
|
|
60
|
+
.string()
|
|
61
|
+
.optional()
|
|
62
|
+
.describe('분류1 코드 직접 지정 (선택). regionName이 있으면 무시.'),
|
|
63
|
+
objL2: z.string().optional().describe('분류2 코드 (선택)'),
|
|
64
|
+
objL3: z.string().optional().describe('분류3 코드 (선택)'),
|
|
65
|
+
objL4: z.string().optional().describe('분류4 코드 (선택)'),
|
|
66
|
+
itemId: z
|
|
67
|
+
.string()
|
|
68
|
+
.optional()
|
|
69
|
+
.describe('항목 ID 직접 지정 (선택). itemName이 있으면 무시.'),
|
|
70
|
+
periodType: z
|
|
71
|
+
.enum(['Y', 'M', 'Q', 'S', 'D', 'F', 'IR'])
|
|
72
|
+
.describe('주기: Y(년), M(월), Q(분기), S(반기), D(일), F(다년), IR(부정기)'),
|
|
73
|
+
startPeriod: z
|
|
74
|
+
.string()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe('시작 시점 (예: 2020, 202001)'),
|
|
77
|
+
endPeriod: z
|
|
78
|
+
.string()
|
|
79
|
+
.optional()
|
|
80
|
+
.describe('종료 시점 (예: 2024, 202412)'),
|
|
81
|
+
recentCount: z
|
|
82
|
+
.number()
|
|
83
|
+
.min(1)
|
|
84
|
+
.max(100)
|
|
85
|
+
.optional()
|
|
86
|
+
.describe('최근 N개 시점 (startPeriod/endPeriod 대신 사용)'),
|
|
87
|
+
}),
|
|
88
|
+
};
|
|
89
|
+
export async function getStatisticsData(input) {
|
|
90
|
+
const client = getKosisClient();
|
|
91
|
+
const cache = getCacheManager();
|
|
92
|
+
try {
|
|
93
|
+
// 자동 메타 lookup — regionName/itemName이 있거나 objL1/itemId가 비어있으면 실행
|
|
94
|
+
let resolvedObjL1 = input.objL1;
|
|
95
|
+
let resolvedObjL2 = input.objL2;
|
|
96
|
+
let resolvedObjL3 = input.objL3;
|
|
97
|
+
let resolvedObjL4 = input.objL4;
|
|
98
|
+
let resolvedItmId = input.itemId;
|
|
99
|
+
let resolveLog = [];
|
|
100
|
+
const needsLookup = input.regionName ||
|
|
101
|
+
input.itemName ||
|
|
102
|
+
(!input.objL1 && !input.itemId);
|
|
103
|
+
if (needsLookup) {
|
|
104
|
+
const r = await resolveDimensions(input.orgId, input.tableId, {
|
|
105
|
+
regionName: input.regionName,
|
|
106
|
+
itemName: input.itemName,
|
|
107
|
+
});
|
|
108
|
+
// 명시적 regionName/itemName 매칭 실패 → 잘못된 폴백 데이터 방지 위해 즉시 에러
|
|
109
|
+
if (r.unmatched) {
|
|
110
|
+
const candidateLines = r.candidates
|
|
111
|
+
? Object.entries(r.candidates)
|
|
112
|
+
.map(([objNm, names]) => ` - ${objNm}: ${names.slice(0, 8).join(', ')}${names.length > 8 ? ' ...' : ''}`)
|
|
113
|
+
.join('\n')
|
|
114
|
+
: '';
|
|
115
|
+
const missMsg = [
|
|
116
|
+
r.unmatched.regionName ? `regionName="${r.unmatched.regionName}"` : '',
|
|
117
|
+
r.unmatched.itemName ? `itemName="${r.unmatched.itemName}"` : '',
|
|
118
|
+
].filter(Boolean).join(', ');
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
data: [],
|
|
122
|
+
totalCount: 0,
|
|
123
|
+
metadata: {
|
|
124
|
+
orgId: input.orgId,
|
|
125
|
+
tableId: input.tableId,
|
|
126
|
+
periodType: input.periodType,
|
|
127
|
+
},
|
|
128
|
+
resolved: r.resolved,
|
|
129
|
+
usageHint: `
|
|
130
|
+
## 메타 lookup 실패
|
|
131
|
+
|
|
132
|
+
요청한 ${missMsg} 이(가) 이 통계표의 어느 분류에서도 매칭되지 않았습니다.
|
|
133
|
+
|
|
134
|
+
### 사용 가능한 후보
|
|
135
|
+
${candidateLines || '(메타 정보 없음)'}
|
|
136
|
+
|
|
137
|
+
### 해결
|
|
138
|
+
1. 광역시도가 다른 자치구일 수 있습니다. 광역시도별 표 ID 패턴은 다음과 같습니다:
|
|
139
|
+
- 서울(201): DT_201004_* — 자치구 분류 포함
|
|
140
|
+
- 부산(202): DT_202, DT_BA102 등 — [구군별] 분류
|
|
141
|
+
- 대구(203): DT_B40001, DT_B70001 등 — [행정구역(구군)별] 분류
|
|
142
|
+
- 통계청(101): DT_1IN1503 시군구 주민등록인구, DT_1YL* e-지방지표 — 모든 시군구
|
|
143
|
+
2. \`search_statistics\` 로 "${input.regionName ?? ''} <원하는 통계>" 검색해서 표 ID 확인.
|
|
144
|
+
3. \`get_table_info\` 로 메타에서 정확한 분류명을 확인.`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// 사용자가 직접 지정한 값은 덮어쓰지 않음
|
|
148
|
+
resolvedObjL1 = input.objL1 ?? r.objL1;
|
|
149
|
+
resolvedObjL2 = input.objL2 ?? r.objL2;
|
|
150
|
+
resolvedObjL3 = input.objL3 ?? r.objL3;
|
|
151
|
+
resolvedObjL4 = input.objL4 ?? r.objL4;
|
|
152
|
+
resolvedItmId = input.itemId ?? r.itmId;
|
|
153
|
+
resolveLog = r.resolved;
|
|
154
|
+
}
|
|
155
|
+
// 캐시된 데이터 조회
|
|
156
|
+
const results = await cache.getStatisticsData({
|
|
157
|
+
orgId: input.orgId,
|
|
158
|
+
tableId: input.tableId,
|
|
159
|
+
objL1: resolvedObjL1,
|
|
160
|
+
objL2: resolvedObjL2,
|
|
161
|
+
objL3: resolvedObjL3,
|
|
162
|
+
objL4: resolvedObjL4,
|
|
163
|
+
itemId: resolvedItmId,
|
|
164
|
+
periodType: input.periodType,
|
|
165
|
+
startPeriod: input.startPeriod,
|
|
166
|
+
endPeriod: input.endPeriod,
|
|
167
|
+
recentCount: input.recentCount,
|
|
168
|
+
}, async () => {
|
|
169
|
+
return client.getStatisticsData({
|
|
170
|
+
orgId: input.orgId,
|
|
171
|
+
tblId: input.tableId,
|
|
172
|
+
objL1: resolvedObjL1,
|
|
173
|
+
objL2: resolvedObjL2,
|
|
174
|
+
objL3: resolvedObjL3,
|
|
175
|
+
objL4: resolvedObjL4,
|
|
176
|
+
itmId: resolvedItmId,
|
|
177
|
+
prdSe: input.periodType,
|
|
178
|
+
startPrdDe: input.startPeriod,
|
|
179
|
+
endPrdDe: input.endPeriod,
|
|
180
|
+
newEstPrdCnt: input.recentCount,
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
if (results.length === 0) {
|
|
184
|
+
// 매칭 실패 디버깅용: 메타 요약 반환
|
|
185
|
+
let candidates;
|
|
186
|
+
try {
|
|
187
|
+
const summary = await summarizeTableMeta(input.orgId, input.tableId, {
|
|
188
|
+
sampleSize: 8,
|
|
189
|
+
filter: input.regionName,
|
|
190
|
+
});
|
|
191
|
+
candidates = summary.groups
|
|
192
|
+
.map((g) => `### [${g.objIdSn === '0' ? '항목' : 'objL' + g.objIdSn}] ${g.objNm} (총 ${g.totalItems}개)\n` +
|
|
193
|
+
g.sample.map((it) => ` - \`${it.ITM_ID}\` ${it.ITM_NM}`).join('\n'))
|
|
194
|
+
.join('\n\n');
|
|
195
|
+
}
|
|
196
|
+
catch { }
|
|
197
|
+
return {
|
|
198
|
+
success: true,
|
|
199
|
+
data: [],
|
|
200
|
+
totalCount: 0,
|
|
201
|
+
metadata: {
|
|
202
|
+
orgId: input.orgId,
|
|
203
|
+
tableId: input.tableId,
|
|
204
|
+
periodType: input.periodType,
|
|
205
|
+
},
|
|
206
|
+
resolved: resolveLog,
|
|
207
|
+
usageHint: `
|
|
208
|
+
## 데이터를 찾을 수 없습니다
|
|
209
|
+
|
|
210
|
+
### 사용된 파라미터
|
|
211
|
+
- orgId: "${input.orgId}"
|
|
212
|
+
- tableId: "${input.tableId}"
|
|
213
|
+
- objL1: "${resolvedObjL1}"
|
|
214
|
+
- objL2: "${resolvedObjL2 ?? ''}"
|
|
215
|
+
- itemId: "${resolvedItmId}"
|
|
216
|
+
- periodType: "${input.periodType}"
|
|
217
|
+
|
|
218
|
+
### 사용 가능한 분류값
|
|
219
|
+
${candidates ?? '(메타 조회 실패)'}
|
|
220
|
+
|
|
221
|
+
### 해결 방법
|
|
222
|
+
1. **get_table_info 호출**하여 유효한 코드를 확인하세요:
|
|
223
|
+
\`\`\`json
|
|
224
|
+
{ "orgId": "${input.orgId}", "tableId": "${input.tableId}" }
|
|
225
|
+
\`\`\`
|
|
226
|
+
|
|
227
|
+
2. **파라미터 확인**:
|
|
228
|
+
- objL1: 분류값 코드 (예: "00"=전국, "11"=서울)
|
|
229
|
+
- itemId: 항목 코드 (예: "T10", "T1")
|
|
230
|
+
- ⚠️ OBJ_ID(예: "ITEM", "B")가 아닌 실제 분류값 코드를 사용하세요
|
|
231
|
+
|
|
232
|
+
### 예시 호출
|
|
233
|
+
{
|
|
234
|
+
"orgId": "${input.orgId}",
|
|
235
|
+
"tableId": "${input.tableId}",
|
|
236
|
+
"objL1": "00",
|
|
237
|
+
"itemId": "T1",
|
|
238
|
+
"periodType": "${input.periodType}",
|
|
239
|
+
"recentCount": 5
|
|
240
|
+
}
|
|
241
|
+
`,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
// 데이터 간소화
|
|
245
|
+
const simplifiedData = simplifyStatisticsData(results);
|
|
246
|
+
// 메타데이터 추출
|
|
247
|
+
const firstItem = results[0];
|
|
248
|
+
const periods = results.map((r) => r.PRD_DE);
|
|
249
|
+
const periodRange = periods.length > 1
|
|
250
|
+
? `${periods[periods.length - 1]} ~ ${periods[0]}`
|
|
251
|
+
: periods[0];
|
|
252
|
+
// 시각화 추천
|
|
253
|
+
const hasMultipleCategories = new Set(simplifiedData.map((d) => d.classification)).size > 1;
|
|
254
|
+
const visualization = recommendVisualization(simplifiedData.length, hasMultipleCategories, ['Y', 'M', 'Q'].includes(input.periodType));
|
|
255
|
+
return {
|
|
256
|
+
success: true,
|
|
257
|
+
tableName: firstItem.TBL_NM,
|
|
258
|
+
unit: firstItem.UNIT_NM,
|
|
259
|
+
data: simplifiedData,
|
|
260
|
+
totalCount: simplifiedData.length,
|
|
261
|
+
visualization: {
|
|
262
|
+
recommendedType: visualization.type,
|
|
263
|
+
reason: visualization.reason,
|
|
264
|
+
},
|
|
265
|
+
metadata: {
|
|
266
|
+
orgId: input.orgId,
|
|
267
|
+
tableId: input.tableId,
|
|
268
|
+
periodType: input.periodType,
|
|
269
|
+
periodRange,
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
console.error('Data error:', error);
|
|
275
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
276
|
+
return {
|
|
277
|
+
success: false,
|
|
278
|
+
data: [],
|
|
279
|
+
totalCount: 0,
|
|
280
|
+
metadata: {
|
|
281
|
+
orgId: input.orgId,
|
|
282
|
+
tableId: input.tableId,
|
|
283
|
+
periodType: input.periodType,
|
|
284
|
+
},
|
|
285
|
+
usageHint: `
|
|
286
|
+
## 데이터 조회 중 오류 발생
|
|
287
|
+
|
|
288
|
+
### 오류 내용
|
|
289
|
+
${errorMessage}
|
|
290
|
+
|
|
291
|
+
### 확인 사항
|
|
292
|
+
1. orgId, tableId가 올바른지 확인하세요
|
|
293
|
+
2. get_table_info로 유효한 objL1, itemId 코드를 확인하세요
|
|
294
|
+
3. periodType이 해당 통계표에서 지원되는지 확인하세요
|
|
295
|
+
|
|
296
|
+
### get_table_info 호출 예시
|
|
297
|
+
{
|
|
298
|
+
"orgId": "${input.orgId}",
|
|
299
|
+
"tableId": "${input.tableId}"
|
|
300
|
+
}
|
|
301
|
+
`,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=getStatisticsData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getStatisticsData.js","sourceRoot":"","sources":["../../src/tools/getStatisticsData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 통계 목록 조회 도구
|
|
3
|
+
* 주제별/기관별 트리 탐색 + 9개 분야 추천 카드 통합 (recommendedTopic 옵션)
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import type { ListItem, SimplifiedStatisticsItem } from '../api/types.js';
|
|
7
|
+
export declare const getStatisticsListSchema: {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
inputSchema: z.ZodObject<{
|
|
11
|
+
viewCode: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodEnum<["MT_ZTITLE", "MT_OTITLE", "MT_GTITLE01", "MT_GTITLE02", "MT_RTITLE", "MT_BUKHAN", "MT_TM1_TITLE", "MT_TM2_TITLE"]>>;
|
|
12
|
+
parentId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
13
|
+
recommendedTopic: z.ZodOptional<z.ZodEnum<["population", "economy", "employment", "housing", "education", "health", "environment", "transport", "social"]>>;
|
|
14
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
limit: number;
|
|
17
|
+
viewCode: "MT_OTITLE" | "MT_ZTITLE" | "MT_GTITLE01" | "MT_GTITLE02" | "MT_RTITLE" | "MT_BUKHAN" | "MT_TM1_TITLE" | "MT_TM2_TITLE";
|
|
18
|
+
parentId: string;
|
|
19
|
+
recommendedTopic?: "population" | "economy" | "employment" | "housing" | "education" | "health" | "environment" | "transport" | "social" | undefined;
|
|
20
|
+
}, {
|
|
21
|
+
viewCode: string;
|
|
22
|
+
limit?: number | undefined;
|
|
23
|
+
parentId?: string | undefined;
|
|
24
|
+
recommendedTopic?: "population" | "economy" | "employment" | "housing" | "education" | "health" | "environment" | "transport" | "social" | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
};
|
|
27
|
+
export type GetStatisticsListInput = z.infer<typeof getStatisticsListSchema.inputSchema>;
|
|
28
|
+
type ListResult = {
|
|
29
|
+
success: boolean;
|
|
30
|
+
viewName: string;
|
|
31
|
+
parentId: string;
|
|
32
|
+
items: ListItem[];
|
|
33
|
+
hasMore: boolean;
|
|
34
|
+
navigation?: {
|
|
35
|
+
canGoUp: boolean;
|
|
36
|
+
instruction: string;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
type RecommendedResult = {
|
|
40
|
+
success: boolean;
|
|
41
|
+
mode: 'recommended';
|
|
42
|
+
topic: {
|
|
43
|
+
code: string;
|
|
44
|
+
name: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
recommendations: SimplifiedStatisticsItem[];
|
|
48
|
+
relatedTopics: string[];
|
|
49
|
+
searchSuggestions: string[];
|
|
50
|
+
};
|
|
51
|
+
export declare function getStatisticsList(input: GetStatisticsListInput): Promise<ListResult | RecommendedResult>;
|
|
52
|
+
/**
|
|
53
|
+
* 사용 가능한 서비스뷰 목록 반환
|
|
54
|
+
*/
|
|
55
|
+
export declare function getAvailableViewCodes(): Array<{
|
|
56
|
+
code: string;
|
|
57
|
+
name: string;
|
|
58
|
+
description: string;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* 추천 토픽 목록 (이전 getAvailableTopics와 동일)
|
|
62
|
+
*/
|
|
63
|
+
export declare function getAvailableRecommendedTopics(): Array<{
|
|
64
|
+
code: string;
|
|
65
|
+
name: string;
|
|
66
|
+
description: string;
|
|
67
|
+
}>;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=getStatisticsList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getStatisticsList.d.ts","sourceRoot":"","sources":["../../src/tools/getStatisticsList.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAkH1E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;CAuDnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAEzF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,eAAe,EAAE,wBAAwB,EAAE,CAAC;IAC5C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,UAAU,GAAG,iBAAiB,CAAC,CAkKzC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,KAAK,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAWD;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,KAAK,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAMD"}
|