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.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +301 -0
  3. package/dist/api/client.d.ts +65 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +143 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/types.d.ts +157 -0
  8. package/dist/api/types.d.ts.map +1 -0
  9. package/dist/api/types.js +5 -0
  10. package/dist/api/types.js.map +1 -0
  11. package/dist/cache/index.d.ts +55 -0
  12. package/dist/cache/index.d.ts.map +1 -0
  13. package/dist/cache/index.js +102 -0
  14. package/dist/cache/index.js.map +1 -0
  15. package/dist/config/index.d.ts +46 -0
  16. package/dist/config/index.d.ts.map +1 -0
  17. package/dist/config/index.js +54 -0
  18. package/dist/config/index.js.map +1 -0
  19. package/dist/data/quickStatsParams.d.ts +76 -0
  20. package/dist/data/quickStatsParams.d.ts.map +1 -0
  21. package/dist/data/quickStatsParams.js +1344 -0
  22. package/dist/data/quickStatsParams.js.map +1 -0
  23. package/dist/index.d.ts +13 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +56 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/prompts/index.d.ts +5 -0
  28. package/dist/prompts/index.d.ts.map +1 -0
  29. package/dist/prompts/index.js +5 -0
  30. package/dist/prompts/index.js.map +1 -0
  31. package/dist/prompts/statisticsAssistant.d.ts +25 -0
  32. package/dist/prompts/statisticsAssistant.d.ts.map +1 -0
  33. package/dist/prompts/statisticsAssistant.js +43 -0
  34. package/dist/prompts/statisticsAssistant.js.map +1 -0
  35. package/dist/resources/categoryTree.d.ts +18 -0
  36. package/dist/resources/categoryTree.d.ts.map +1 -0
  37. package/dist/resources/categoryTree.js +80 -0
  38. package/dist/resources/categoryTree.js.map +1 -0
  39. package/dist/resources/index.d.ts +6 -0
  40. package/dist/resources/index.d.ts.map +1 -0
  41. package/dist/resources/index.js +6 -0
  42. package/dist/resources/index.js.map +1 -0
  43. package/dist/resources/keyIndicators.d.ts +20 -0
  44. package/dist/resources/keyIndicators.d.ts.map +1 -0
  45. package/dist/resources/keyIndicators.js +108 -0
  46. package/dist/resources/keyIndicators.js.map +1 -0
  47. package/dist/server-http.d.ts +10 -0
  48. package/dist/server-http.d.ts.map +1 -0
  49. package/dist/server-http.js +134 -0
  50. package/dist/server-http.js.map +1 -0
  51. package/dist/server.d.ts +10 -0
  52. package/dist/server.d.ts.map +1 -0
  53. package/dist/server.js +194 -0
  54. package/dist/server.js.map +1 -0
  55. package/dist/tools/analyzeTimeSeries.d.ts +70 -0
  56. package/dist/tools/analyzeTimeSeries.d.ts.map +1 -0
  57. package/dist/tools/analyzeTimeSeries.js +204 -0
  58. package/dist/tools/analyzeTimeSeries.js.map +1 -0
  59. package/dist/tools/chains.d.ts +197 -0
  60. package/dist/tools/chains.d.ts.map +1 -0
  61. package/dist/tools/chains.js +369 -0
  62. package/dist/tools/chains.js.map +1 -0
  63. package/dist/tools/compareStatistics.d.ts +62 -0
  64. package/dist/tools/compareStatistics.d.ts.map +1 -0
  65. package/dist/tools/compareStatistics.js +190 -0
  66. package/dist/tools/compareStatistics.js.map +1 -0
  67. package/dist/tools/fetchKosisExcel.d.ts +62 -0
  68. package/dist/tools/fetchKosisExcel.d.ts.map +1 -0
  69. package/dist/tools/fetchKosisExcel.js +366 -0
  70. package/dist/tools/fetchKosisExcel.js.map +1 -0
  71. package/dist/tools/getRecommendedStats.d.ts +41 -0
  72. package/dist/tools/getRecommendedStats.d.ts.map +1 -0
  73. package/dist/tools/getRecommendedStats.js +251 -0
  74. package/dist/tools/getRecommendedStats.js.map +1 -0
  75. package/dist/tools/getStatisticsData.d.ts +75 -0
  76. package/dist/tools/getStatisticsData.d.ts.map +1 -0
  77. package/dist/tools/getStatisticsData.js +305 -0
  78. package/dist/tools/getStatisticsData.js.map +1 -0
  79. package/dist/tools/getStatisticsList.d.ts +69 -0
  80. package/dist/tools/getStatisticsList.d.ts.map +1 -0
  81. package/dist/tools/getStatisticsList.js +336 -0
  82. package/dist/tools/getStatisticsList.js.map +1 -0
  83. package/dist/tools/getTableInfo.d.ts +66 -0
  84. package/dist/tools/getTableInfo.d.ts.map +1 -0
  85. package/dist/tools/getTableInfo.js +85 -0
  86. package/dist/tools/getTableInfo.js.map +1 -0
  87. package/dist/tools/index.d.ts +14 -0
  88. package/dist/tools/index.d.ts.map +1 -0
  89. package/dist/tools/index.js +19 -0
  90. package/dist/tools/index.js.map +1 -0
  91. package/dist/tools/quickStats.d.ts +71 -0
  92. package/dist/tools/quickStats.d.ts.map +1 -0
  93. package/dist/tools/quickStats.js +490 -0
  94. package/dist/tools/quickStats.js.map +1 -0
  95. package/dist/tools/quickTrend.d.ts +61 -0
  96. package/dist/tools/quickTrend.d.ts.map +1 -0
  97. package/dist/tools/quickTrend.js +328 -0
  98. package/dist/tools/quickTrend.js.map +1 -0
  99. package/dist/tools/searchStatistics.d.ts +41 -0
  100. package/dist/tools/searchStatistics.d.ts.map +1 -0
  101. package/dist/tools/searchStatistics.js +318 -0
  102. package/dist/tools/searchStatistics.js.map +1 -0
  103. package/dist/utils/dataFormatter.d.ts +40 -0
  104. package/dist/utils/dataFormatter.d.ts.map +1 -0
  105. package/dist/utils/dataFormatter.js +142 -0
  106. package/dist/utils/dataFormatter.js.map +1 -0
  107. package/dist/utils/errorHandler.d.ts +33 -0
  108. package/dist/utils/errorHandler.d.ts.map +1 -0
  109. package/dist/utils/errorHandler.js +94 -0
  110. package/dist/utils/errorHandler.js.map +1 -0
  111. package/dist/utils/metaLookup.d.ts +93 -0
  112. package/dist/utils/metaLookup.d.ts.map +1 -0
  113. package/dist/utils/metaLookup.js +170 -0
  114. package/dist/utils/metaLookup.js.map +1 -0
  115. package/dist/utils/queryParser.d.ts +45 -0
  116. package/dist/utils/queryParser.d.ts.map +1 -0
  117. package/dist/utils/queryParser.js +244 -0
  118. package/dist/utils/queryParser.js.map +1 -0
  119. package/dist/utils/regions.d.ts +70 -0
  120. package/dist/utils/regions.d.ts.map +1 -0
  121. package/dist/utils/regions.js +261 -0
  122. package/dist/utils/regions.js.map +1 -0
  123. package/package.json +60 -0
@@ -0,0 +1,197 @@
1
+ /**
2
+ * 체인 도ꡬ β€” μ—¬λŸ¬ 도ꡬλ₯Ό λ¬Άμ–΄ 곡무원 μ—…λ¬΄μš© μ’…ν•© λΈŒλ¦¬ν•‘ 생성
3
+ *
4
+ * 섀계 원칙 (korean-law-mcp의 chains νŒ¨ν„΄ 차용):
5
+ * - 단일 μžμ—°μ–΄ 호좜둜 μ—¬λŸ¬ quickStats / quickTrend 병렬 μ‹€ν–‰
6
+ * - κ²°κ³Όλ₯Ό μΉ΄λ“œ/맀트릭슀 ν˜•νƒœλ‘œ μ •λ¦¬ν•˜μ—¬ LLM이 κ·ΈλŒ€λ‘œ λ³΄κ³ μ„œν™” κ°€λŠ₯
7
+ * - λΆ€λΆ„ μ‹€νŒ¨ ν—ˆμš© (ν•œ μ§€ν‘œ λͺ» 가져와도 λ‹€λ₯Έ μ§€ν‘œλŠ” ν‘œμ‹œ)
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const chainRegionBriefSchema: {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: z.ZodObject<{
14
+ region: z.ZodString;
15
+ includeNational: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
16
+ format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["detail", "speech"]>>>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ format: "detail" | "speech";
19
+ region: string;
20
+ includeNational: boolean;
21
+ }, {
22
+ region: string;
23
+ format?: "detail" | "speech" | undefined;
24
+ includeNational?: boolean | undefined;
25
+ }>;
26
+ };
27
+ export type ChainRegionBriefInput = z.infer<typeof chainRegionBriefSchema.inputSchema>;
28
+ export declare function chainRegionBrief(input: ChainRegionBriefInput): Promise<{
29
+ success: boolean;
30
+ region: string;
31
+ format: string;
32
+ coverage: string;
33
+ speechLine: string;
34
+ indicators: {
35
+ keyword: "인ꡬ" | "고령인ꡬ" | "μΆœμ‚°μœ¨" | "μ‹€μ—…λ₯ " | "고용λ₯ " | "μ›”κΈ‰" | "μ•„νŒŒνŠΈκ°€κ²©" | "전세가격" | "λ―Έμ„Έλ¨Όμ§€" | "ꡐ톡사고" | "λ²”μ£„μœ¨" | "GRDP" | "μ˜μ‚¬μˆ˜";
36
+ label: "ν•©κ³„μΆœμ‚°μœ¨" | "μ‹€μ—…λ₯ " | "고용λ₯ " | "μ•„νŒŒνŠΈλ§€λ§€κ°€κ²©μ§€μˆ˜" | "지역내총생산(λͺ…λͺ©)" | "μ£Όνƒμ „μ„Έκ°€κ²©μ§€μˆ˜" | "65μ„Έ 이상 고령인ꡬ" | "주민등둝 인ꡬ" | "월평균 μž„κΈˆ" | "인ꡬ 천λͺ…λ‹Ή μ˜μ‚¬μˆ˜" | "μžλ™μ°¨ μ²œλŒ€λ‹Ή ꡐ톡사고" | "인ꡬ 천λͺ…λ‹Ή λ²”μ£„λ°œμƒ" | "PM2.5 농도";
37
+ tier: "housing" | "social" | "core" | "econ" | "env";
38
+ success: any;
39
+ value: any;
40
+ unit: any;
41
+ period: any;
42
+ source: any;
43
+ note: any;
44
+ message: any;
45
+ }[];
46
+ fallbackNote: any;
47
+ national?: undefined;
48
+ summary?: undefined;
49
+ } | {
50
+ success: boolean;
51
+ region: string;
52
+ format: string;
53
+ coverage: string;
54
+ indicators: {
55
+ keyword: "인ꡬ" | "고령인ꡬ" | "μΆœμ‚°μœ¨" | "μ‹€μ—…λ₯ " | "고용λ₯ " | "μ›”κΈ‰" | "μ•„νŒŒνŠΈκ°€κ²©" | "전세가격" | "λ―Έμ„Έλ¨Όμ§€" | "ꡐ톡사고" | "λ²”μ£„μœ¨" | "GRDP" | "μ˜μ‚¬μˆ˜";
56
+ label: "ν•©κ³„μΆœμ‚°μœ¨" | "μ‹€μ—…λ₯ " | "고용λ₯ " | "μ•„νŒŒνŠΈλ§€λ§€κ°€κ²©μ§€μˆ˜" | "지역내총생산(λͺ…λͺ©)" | "μ£Όνƒμ „μ„Έκ°€κ²©μ§€μˆ˜" | "65μ„Έ 이상 고령인ꡬ" | "주민등둝 인ꡬ" | "월평균 μž„κΈˆ" | "인ꡬ 천λͺ…λ‹Ή μ˜μ‚¬μˆ˜" | "μžλ™μ°¨ μ²œλŒ€λ‹Ή ꡐ톡사고" | "인ꡬ 천λͺ…λ‹Ή λ²”μ£„λ°œμƒ" | "PM2.5 농도";
57
+ tier: "housing" | "social" | "core" | "econ" | "env";
58
+ success: any;
59
+ value: any;
60
+ unit: any;
61
+ period: any;
62
+ source: any;
63
+ note: any;
64
+ message: any;
65
+ }[];
66
+ national: any[] | undefined;
67
+ summary: string;
68
+ fallbackNote: any;
69
+ speechLine?: undefined;
70
+ }>;
71
+ export declare const chainCompareRegionsSchema: {
72
+ name: string;
73
+ description: string;
74
+ inputSchema: z.ZodObject<{
75
+ regions: z.ZodArray<z.ZodString, "many">;
76
+ keywords: z.ZodArray<z.ZodString, "many">;
77
+ }, "strip", z.ZodTypeAny, {
78
+ regions: string[];
79
+ keywords: string[];
80
+ }, {
81
+ regions: string[];
82
+ keywords: string[];
83
+ }>;
84
+ };
85
+ export type ChainCompareRegionsInput = z.infer<typeof chainCompareRegionsSchema.inputSchema>;
86
+ export declare function chainCompareRegions(input: ChainCompareRegionsInput): Promise<{
87
+ fallbackNotes?: {
88
+ region: string;
89
+ note: string;
90
+ }[] | undefined;
91
+ success: boolean;
92
+ regions: string[];
93
+ keywords: string[];
94
+ matrix: {
95
+ region: string;
96
+ cells: {
97
+ region: string;
98
+ keyword: string;
99
+ value: any;
100
+ numericValue: number | null;
101
+ unit: string | null;
102
+ period: string | null;
103
+ success: boolean;
104
+ note?: string | null;
105
+ }[];
106
+ }[];
107
+ insights: ({
108
+ keyword: string;
109
+ ranking: never[];
110
+ note: string;
111
+ highest?: undefined;
112
+ lowest?: undefined;
113
+ } | {
114
+ keyword: string;
115
+ highest: {
116
+ rank: number;
117
+ region: string;
118
+ value: any;
119
+ unit: string | null;
120
+ period: string | null;
121
+ };
122
+ lowest: {
123
+ rank: number;
124
+ region: string;
125
+ value: any;
126
+ unit: string | null;
127
+ period: string | null;
128
+ };
129
+ ranking: {
130
+ rank: number;
131
+ region: string;
132
+ value: any;
133
+ unit: string | null;
134
+ period: string | null;
135
+ }[];
136
+ note?: undefined;
137
+ })[];
138
+ summary: string;
139
+ }>;
140
+ export declare const chainPolicyIndicatorSchema: {
141
+ name: string;
142
+ description: string;
143
+ inputSchema: z.ZodObject<{
144
+ domain: z.ZodEnum<["lowFertility", "aging", "housing", "jobs", "safety", "health", "economy"]>;
145
+ region: z.ZodOptional<z.ZodString>;
146
+ yearCount: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
147
+ }, "strip", z.ZodTypeAny, {
148
+ yearCount: number;
149
+ domain: "economy" | "housing" | "health" | "aging" | "lowFertility" | "jobs" | "safety";
150
+ region?: string | undefined;
151
+ }, {
152
+ domain: "economy" | "housing" | "health" | "aging" | "lowFertility" | "jobs" | "safety";
153
+ region?: string | undefined;
154
+ yearCount?: number | undefined;
155
+ }>;
156
+ };
157
+ export type ChainPolicyIndicatorInput = z.infer<typeof chainPolicyIndicatorSchema.inputSchema>;
158
+ export declare function chainPolicyIndicator(input: ChainPolicyIndicatorInput): Promise<{
159
+ success: boolean;
160
+ domain: "κ³ λ Ήν™”" | "μ €μΆœμ‚°" | "경제" | "μ£Όκ±°" | "일자리" | "μΉ˜μ•ˆΒ·μ•ˆμ „" | "보건·의료";
161
+ domainDescription: "ν•©κ³„μΆœμ‚°μœ¨Β·μΆœμƒμ•„μˆ˜Β·ν˜ΌμΈκ±΄μˆ˜Β·ν‰κ· μ΄ˆν˜Όμ—°λ Ή" | "κ³ λ ΉμΈκ΅¬Β·λ…Έλ Ήν™”μ§€μˆ˜Β·κΈ°λŒ€μˆ˜λͺ…" | "μ•„νŒŒνŠΈ/주택 λ§€λ§€Β·μ „μ„Έ κ°€κ²©μ§€μˆ˜" | "μ‹€μ—…λ₯ Β·κ³ μš©λ₯ Β·μ·¨μ—…μžμˆ˜Β·μ›”ν‰κ· μž„κΈˆ" | "λ²”μ£„μœ¨Β·κ΅ν†΅μ‚¬κ³ Β·μ‚¬λ§λ₯ " | "μ˜μ‚¬μˆ˜Β·κΈ°λŒ€μˆ˜λͺ…·사망λ₯ " | "GDPΒ·κ²½μ œμ„±μž₯λ₯ Β·λ¬Όκ°€Β·μˆ˜μΆœ";
162
+ region: string;
163
+ yearCount: number;
164
+ indicators: ({
165
+ keyword: "μΆœμƒμ•„μˆ˜" | "사망λ₯ " | "κΈ°λŒ€μˆ˜λͺ…" | "고령인ꡬ" | "혼인건수" | "μΆœμ‚°μœ¨" | "GDP" | "λ¬Όκ°€" | "κ²½μ œμ„±μž₯λ₯ " | "수좜" | "μ‹€μ—…λ₯ " | "고용λ₯ " | "μ·¨μ—…μžμˆ˜" | "μ›”κΈ‰" | "주택가격" | "μ•„νŒŒνŠΈκ°€κ²©" | "전세가격" | "ꡐ톡사고" | "λ²”μ£„μœ¨" | "μ˜μ‚¬μˆ˜" | "ν‰κ· μ΄ˆν˜Όμ—°λ Ή" | "λ…Έλ Ήν™”μ§€μˆ˜";
166
+ region: string;
167
+ success: boolean;
168
+ trend: "stable" | "increasing" | "decreasing" | "fluctuating";
169
+ trendDescription: string;
170
+ startYear: string;
171
+ endYear: string;
172
+ startValue: string;
173
+ endValue: string;
174
+ totalChangeRate: string | null;
175
+ dataPoints: import("./quickTrend.js").TrendDataPoint[];
176
+ source: string | null;
177
+ note: string | null;
178
+ error?: undefined;
179
+ } | {
180
+ keyword: "μΆœμƒμ•„μˆ˜" | "사망λ₯ " | "κΈ°λŒ€μˆ˜λͺ…" | "고령인ꡬ" | "혼인건수" | "μΆœμ‚°μœ¨" | "GDP" | "λ¬Όκ°€" | "κ²½μ œμ„±μž₯λ₯ " | "수좜" | "μ‹€μ—…λ₯ " | "고용λ₯ " | "μ·¨μ—…μžμˆ˜" | "μ›”κΈ‰" | "주택가격" | "μ•„νŒŒνŠΈκ°€κ²©" | "전세가격" | "ꡐ톡사고" | "λ²”μ£„μœ¨" | "μ˜μ‚¬μˆ˜" | "ν‰κ· μ΄ˆν˜Όμ—°λ Ή" | "λ…Έλ Ήν™”μ§€μˆ˜";
181
+ success: boolean;
182
+ error: string;
183
+ region?: undefined;
184
+ trend?: undefined;
185
+ trendDescription?: undefined;
186
+ startYear?: undefined;
187
+ endYear?: undefined;
188
+ startValue?: undefined;
189
+ endValue?: undefined;
190
+ totalChangeRate?: undefined;
191
+ dataPoints?: undefined;
192
+ source?: undefined;
193
+ note?: undefined;
194
+ })[];
195
+ summary: string;
196
+ }>;
197
+ //# sourceMappingURL=chains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../src/tools/chains.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwBxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;CA4BlC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,WAAW,CAAC,CAAC;AAEvF,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FlE;AAMD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;CAwBrC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,WAAW,CAAC,CAAC;AAE7F,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB;;;;;;;;;gBAc/C,MAAM;eAAS;oBAV7B,MAAM;qBACL,MAAM;mBACR,GAAG;0BACI,MAAM,GAAG,IAAI;kBACrB,MAAM,GAAG,IAAI;oBACX,MAAM,GAAG,IAAI;qBACZ,OAAO;mBACT,MAAM,GAAG,IAAI;WAGuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6F9C;AA4CD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;CA2BtC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,WAAW,CAAC,CAAC;AAE/F,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0D1E"}
@@ -0,0 +1,369 @@
1
+ /**
2
+ * 체인 도ꡬ β€” μ—¬λŸ¬ 도ꡬλ₯Ό λ¬Άμ–΄ 곡무원 μ—…λ¬΄μš© μ’…ν•© λΈŒλ¦¬ν•‘ 생성
3
+ *
4
+ * 섀계 원칙 (korean-law-mcp의 chains νŒ¨ν„΄ 차용):
5
+ * - 단일 μžμ—°μ–΄ 호좜둜 μ—¬λŸ¬ quickStats / quickTrend 병렬 μ‹€ν–‰
6
+ * - κ²°κ³Όλ₯Ό μΉ΄λ“œ/맀트릭슀 ν˜•νƒœλ‘œ μ •λ¦¬ν•˜μ—¬ LLM이 κ·ΈλŒ€λ‘œ λ³΄κ³ μ„œν™” κ°€λŠ₯
7
+ * - λΆ€λΆ„ μ‹€νŒ¨ ν—ˆμš© (ν•œ μ§€ν‘œ λͺ» 가져와도 λ‹€λ₯Έ μ§€ν‘œλŠ” ν‘œμ‹œ)
8
+ */
9
+ import { z } from 'zod';
10
+ import { quickStats } from './quickStats.js';
11
+ import { quickTrend } from './quickTrend.js';
12
+ // ═══════════════════════════════════════════════════════════
13
+ // chain_region_brief β€” μ§€μ—­ ν•œμž₯ μ’…ν•© λΈŒλ¦¬ν•‘
14
+ // ═══════════════════════════════════════════════════════════
15
+ const REGION_BRIEF_INDICATORS = [
16
+ { key: '인ꡬ', label: '주민등둝 인ꡬ', tier: 'core' },
17
+ { key: 'μΆœμ‚°μœ¨', label: 'ν•©κ³„μΆœμ‚°μœ¨', tier: 'core' },
18
+ { key: '고령인ꡬ', label: '65μ„Έ 이상 고령인ꡬ', tier: 'core' },
19
+ { key: 'μ‹€μ—…λ₯ ', label: 'μ‹€μ—…λ₯ ', tier: 'core' },
20
+ { key: '고용λ₯ ', label: '고용λ₯ ', tier: 'core' },
21
+ { key: 'GRDP', label: '지역내총생산(λͺ…λͺ©)', tier: 'econ' },
22
+ { key: 'μ›”κΈ‰', label: '월평균 μž„κΈˆ', tier: 'econ' },
23
+ { key: 'μ•„νŒŒνŠΈκ°€κ²©', label: 'μ•„νŒŒνŠΈλ§€λ§€κ°€κ²©μ§€μˆ˜', tier: 'housing' },
24
+ { key: '전세가격', label: 'μ£Όνƒμ „μ„Έκ°€κ²©μ§€μˆ˜', tier: 'housing' },
25
+ { key: 'μ˜μ‚¬μˆ˜', label: '인ꡬ 천λͺ…λ‹Ή μ˜μ‚¬μˆ˜', tier: 'social' },
26
+ { key: 'ꡐ톡사고', label: 'μžλ™μ°¨ μ²œλŒ€λ‹Ή ꡐ톡사고', tier: 'social' },
27
+ { key: 'λ²”μ£„μœ¨', label: '인ꡬ 천λͺ…λ‹Ή λ²”μ£„λ°œμƒ', tier: 'social' },
28
+ { key: 'λ―Έμ„Έλ¨Όμ§€', label: 'PM2.5 농도', tier: 'env' },
29
+ ];
30
+ export const chainRegionBriefSchema = {
31
+ name: 'chain_region_brief',
32
+ description: `[⛓체인] μ§€μ—­ ν•œμž₯ μ’…ν•© λΈŒλ¦¬ν•‘ β€” μΈκ΅¬Β·κ³ μš©Β·κ²½μ œΒ·μ£Όκ±°Β·μ‚¬νšŒΒ·ν™˜κ²½ 핡심 13μ§€ν‘œ 병렬 쑰회.
33
+
34
+ 🎯 μ‚¬μš© μ‹œμ : "OOμ‹œ 톡계 λ³΄κ³ μ„œ", "μ§€μ—­ μ’…ν•© λΈŒλ¦¬ν•‘", "μ‹œμ •μ—°μ„€/μ§€λ°©μ˜νšŒ λ‹΅λ³€ μ€€λΉ„", "λ„μ‹œ ν˜„ν™© ν•œλˆˆμ—", "μ·¨μž„μ‚¬Β·μ‹ λ…„μ‚¬ ν•œ 쀄 톡계"
35
+ πŸ”„ 도ꡬ 비ꡐ:
36
+ β€’ 단일 μ§€ν‘œλ§Œ ν•„μš” β†’ quick_stats
37
+ β€’ λ‹€μ§€μ—­ 비ꡐ 맀트릭슀 β†’ chain_compare_regions
38
+ β€’ μ •μ±… μ˜μ—­ μΆ”μ„Έ 묢음 β†’ chain_policy_indicator
39
+
40
+ β–  λ°˜ν™˜: 13개 μ§€ν‘œ(인ꡬ/μΆœμ‚°μœ¨/κ³ λ Ή/μ‹€μ—…λ₯ /고용λ₯ /GRDP/μž„κΈˆ/주택/μ „μ„Έ/μ˜μ‚¬μˆ˜/ꡐ톡사고/λ²”μ£„μœ¨/λ―Έμ„Έλ¨Όμ§€) + μžμΉ˜κ΅¬β†’κ΄‘μ—­μ‹œλ„ fallback μžλ™
41
+ β–  format='speech'λ©΄ μ—°μ„€μš© 1쀄 μš”μ•½λ§Œ (μ·¨μž„μ‚¬Β·μ‹ λ…„μ‚¬Β·μ—°μ„€λ¬Έ 톡계 인용용)
42
+ β–  λΆ€λΆ„ μ‹€νŒ¨ ν—ˆμš© (μ§€ν‘œλ³„ 데이터 κ°€μš©μ„± 상이)`,
43
+ inputSchema: z.object({
44
+ region: z
45
+ .string()
46
+ .describe('μ§€μ—­λͺ… (예: "μ„œμšΈ", "λΆ€μ‚°", "μ„±λ‚¨μ‹œ", "광진ꡬ"). μžμΉ˜κ΅¬Β·μ‹œκ΅°μ€ κ΄‘μ—­μ‹œλ„λ‘œ μžλ™ fallback.'),
47
+ includeNational: z
48
+ .boolean()
49
+ .optional()
50
+ .default(false)
51
+ .describe('μ „κ΅­ 평균 λ™μ‹œ 쑰회 μ—¬λΆ€ (μ§€μ—­κ³Ό λΉ„κ΅μš©)'),
52
+ format: z
53
+ .enum(['detail', 'speech'])
54
+ .optional()
55
+ .default('detail')
56
+ .describe('좜λ ₯ ν˜•μ‹. detail=13μ§€ν‘œ 전체, speech=μƒμœ„ 5개 ν•œ 쀄 μš”μ•½(μ·¨μž„μ‚¬Β·μ‹ λ…„μ‚¬μš©)'),
57
+ }),
58
+ };
59
+ export async function chainRegionBrief(input) {
60
+ const { region, includeNational, format } = input;
61
+ const fetchOne = async (kw, regionArg) => {
62
+ try {
63
+ return await quickStats({ query: kw, region: regionArg });
64
+ }
65
+ catch (e) {
66
+ return {
67
+ success: false,
68
+ answer: `쑰회 μ‹€νŒ¨: ${e instanceof Error ? e.message : String(e)}`,
69
+ };
70
+ }
71
+ };
72
+ const regional = await Promise.all(REGION_BRIEF_INDICATORS.map(async (ind) => {
73
+ const r = await fetchOne(ind.key, region);
74
+ return {
75
+ keyword: ind.key,
76
+ label: ind.label,
77
+ tier: ind.tier,
78
+ success: r.success,
79
+ value: r.value ?? null,
80
+ unit: r.unit ?? null,
81
+ period: r.period ?? null,
82
+ source: r.source?.tableName ?? null,
83
+ note: r.note ?? null,
84
+ message: r.success ? r.answer?.split('\n')[0] : r.answer,
85
+ };
86
+ }));
87
+ let national;
88
+ if (includeNational) {
89
+ national = await Promise.all(REGION_BRIEF_INDICATORS.map(async (ind) => {
90
+ const r = await fetchOne(ind.key);
91
+ return {
92
+ keyword: ind.key,
93
+ label: ind.label,
94
+ value: r.value ?? null,
95
+ unit: r.unit ?? null,
96
+ period: r.period ?? null,
97
+ success: r.success,
98
+ };
99
+ }));
100
+ }
101
+ const successCount = regional.filter((r) => r.success).length;
102
+ const successItems = regional.filter((r) => r.success);
103
+ const failedItems = regional.filter((r) => !r.success);
104
+ // μžμΉ˜κ΅¬β†’κ΄‘μ—­μ‹œλ„ fallback λ…ΈνŠΈκ°€ 있으면 μš°μ„  λ…ΈμΆœ (λͺ¨λ“  indicator에 동일 λ…ΈνŠΈκ°€ λ“€μ–΄κ°€λ―€λ‘œ 첫 1개)
105
+ const districtFallbackNote = regional.find((r) => r.note && r.note.includes('자치ꡬ'))?.note ?? null;
106
+ const otherNote = regional.find((r) => r.note && !r.note.includes('자치ꡬ'))?.note ?? null;
107
+ // speech ν˜•μ‹: μƒμœ„ 5개 핡심 μ§€ν‘œλ§Œ ν•œ 쀄 μš”μ•½
108
+ if (format === 'speech') {
109
+ const speechIndicators = ['인ꡬ', 'μΆœμ‚°μœ¨', '고령인ꡬ', 'μ‹€μ—…λ₯ ', 'GRDP'];
110
+ const speechLines = successItems
111
+ .filter((r) => speechIndicators.includes(r.keyword))
112
+ .map((r) => `${r.label} ${r.value}${r.unit ?? ''}`);
113
+ return {
114
+ success: true,
115
+ region,
116
+ format: 'speech',
117
+ coverage: `${successCount}/${REGION_BRIEF_INDICATORS.length} μ§€ν‘œ κ°€μš©`,
118
+ speechLine: `${region}의 ${speechLines.join(', ')} (${successItems[0]?.period ?? '-'} κΈ°μ€€).`,
119
+ indicators: successItems.filter((r) => speechIndicators.includes(r.keyword)),
120
+ fallbackNote: districtFallbackNote ?? otherNote ?? null,
121
+ };
122
+ }
123
+ return {
124
+ success: true,
125
+ region,
126
+ format: 'detail',
127
+ coverage: `${successCount}/${REGION_BRIEF_INDICATORS.length} μ§€ν‘œ 쑰회 성곡`,
128
+ indicators: regional,
129
+ national,
130
+ summary: `πŸ“ **${region} μ’…ν•© λΈŒλ¦¬ν•‘** (${successCount}/${REGION_BRIEF_INDICATORS.length} μ§€ν‘œ κ°€μš©)\n` +
131
+ successItems
132
+ .map((r) => `β€’ ${r.label}: ${r.value}${r.unit ?? ''} (${r.period ?? '-'})`)
133
+ .join('\n') +
134
+ (failedItems.length > 0
135
+ ? `\n\n⚠️ λ―Έκ°€μš© μ§€ν‘œ(${failedItems.length}): ${failedItems.map((r) => r.keyword).join(', ')}`
136
+ : ''),
137
+ fallbackNote: districtFallbackNote ??
138
+ otherNote ??
139
+ 'κ΄‘μ—­μ‹œλ„ λ‹¨μœ„ 데이터. μžμΉ˜κ΅¬λ³„ μ •λ°€ λ°μ΄ν„°λŠ” fetch_kosis_excel μ‚¬μš©.',
140
+ };
141
+ }
142
+ // ═══════════════════════════════════════════════════════════
143
+ // chain_compare_regions β€” Nμ§€μ—­ Γ— Mμ§€ν‘œ 맀트릭슀 비ꡐ
144
+ // ═══════════════════════════════════════════════════════════
145
+ export const chainCompareRegionsSchema = {
146
+ name: 'chain_compare_regions',
147
+ description: `[⛓체인] N개 μ§€μ—­ Γ— M개 μ§€ν‘œ 맀트릭슀 비ꡐ β€” μžμ—°μ–΄λ‘œ λ‹€μ§€μ—­ 비ꡐ ν•œ λ²ˆμ—.
148
+
149
+ 🎯 μ‚¬μš© μ‹œμ : "μ„œμšΈ/λΆ€μ‚°/인천 인ꡬ·싀업λ₯  비ꡐ", "μˆ˜λ„κΆŒ vs κ΄‘μ—­μ‹œ GRDP", "μ§€μžμ²΄ μ •μ±… 벀치마크"
150
+ πŸ”„ 도ꡬ 비ꡐ:
151
+ β€’ 동일 ν†΅κ³„ν‘œ λ‚΄ μ‹œμ Β·ν•­λͺ© 비ꡐ β†’ compare_statistics
152
+ β€’ 단일 μ§€μ—­ μ’…ν•© λΈŒλ¦¬ν•‘ β†’ chain_region_brief
153
+ β€’ μ •μ±… μ˜μ—­ μΆ”μ„Έ β†’ chain_policy_indicator
154
+
155
+ β–  맀트릭슀 + μ§€ν‘œλ³„ 졜고/μ΅œμ € μžλ™ μ‚°μΆœ + μˆœμœ„
156
+ β–  regionsΒ·keywords λͺ¨λ‘ μžμ—°μ–΄ κ°€λŠ₯ (μ„±λ‚¨μ‹œ β†’ κ²½κΈ° μžλ™ fallback)`,
157
+ inputSchema: z.object({
158
+ regions: z
159
+ .array(z.string())
160
+ .min(2)
161
+ .max(17)
162
+ .describe('비ꡐ μ§€μ—­ λ°°μ—΄ (2~17개, μ „κ΅­ κ΄‘μ—­μ‹œλ„ 17개 λ™μ‹œ 비ꡐ κ°€λŠ₯). 예: ["μ„œμšΈ", "λΆ€μ‚°", "인천"]'),
163
+ keywords: z
164
+ .array(z.string())
165
+ .min(1)
166
+ .max(8)
167
+ .describe('비ꡐ μ§€ν‘œ ν‚€μ›Œλ“œ λ°°μ—΄ (1~8개). 예: ["인ꡬ", "μΆœμ‚°μœ¨", "μ‹€μ—…λ₯ "]'),
168
+ }),
169
+ };
170
+ export async function chainCompareRegions(input) {
171
+ const { regions, keywords } = input;
172
+ const matrix = await Promise.all(regions.map(async (region) => {
173
+ const cells = await Promise.all(keywords.map(async (kw) => {
174
+ try {
175
+ const r = await quickStats({ query: kw, region });
176
+ const raw = r.value;
177
+ const numeric = raw == null
178
+ ? null
179
+ : parseFloat(String(raw).replace(/,/g, '')) || null;
180
+ return {
181
+ region,
182
+ keyword: kw,
183
+ value: raw ?? null,
184
+ numericValue: numeric,
185
+ unit: r.unit ?? null,
186
+ period: r.period ?? null,
187
+ success: r.success,
188
+ note: r.note ?? null,
189
+ };
190
+ }
191
+ catch (e) {
192
+ return {
193
+ region,
194
+ keyword: kw,
195
+ value: null,
196
+ numericValue: null,
197
+ unit: null,
198
+ period: null,
199
+ success: false,
200
+ note: e instanceof Error ? e.message : String(e),
201
+ };
202
+ }
203
+ }));
204
+ return { region, cells };
205
+ }));
206
+ // μ§€ν‘œλ³„ 졜고/μ΅œμ € 및 μˆœμœ„
207
+ const insights = keywords.map((kw) => {
208
+ const cells = matrix
209
+ .flatMap((m) => m.cells.filter((c) => c.keyword === kw && c.success && c.numericValue != null))
210
+ .sort((a, b) => (b.numericValue ?? 0) - (a.numericValue ?? 0));
211
+ if (cells.length === 0) {
212
+ return { keyword: kw, ranking: [], note: 'λͺ¨λ“  μ§€μ—­ 데이터 쑰회 μ‹€νŒ¨' };
213
+ }
214
+ const ranking = cells.map((c, i) => ({
215
+ rank: i + 1,
216
+ region: c.region,
217
+ value: c.value,
218
+ unit: c.unit,
219
+ period: c.period,
220
+ }));
221
+ return {
222
+ keyword: kw,
223
+ highest: ranking[0],
224
+ lowest: ranking[ranking.length - 1],
225
+ ranking,
226
+ };
227
+ });
228
+ // μžμΉ˜κ΅¬β†’κ΄‘μ—­μ‹œλ„ fallback λ…ΈνŠΈ 쀑볡 μ œκ±°ν•˜μ—¬ region별 1건만 λ…ΈμΆœ
229
+ const fallbackNotesByRegion = new Map();
230
+ for (const m of matrix) {
231
+ for (const c of m.cells) {
232
+ if (c.note && c.note.includes('자치ꡬ') && !fallbackNotesByRegion.has(m.region)) {
233
+ fallbackNotesByRegion.set(m.region, c.note);
234
+ break;
235
+ }
236
+ }
237
+ }
238
+ const fallbackNotes = Array.from(fallbackNotesByRegion.entries()).map(([region, note]) => ({ region, note }));
239
+ return {
240
+ success: true,
241
+ regions,
242
+ keywords,
243
+ matrix,
244
+ insights,
245
+ summary: `πŸ“Š **${regions.length}개 μ§€μ—­ Γ— ${keywords.length}개 μ§€ν‘œ 비ꡐ**\n` +
246
+ insights
247
+ .filter((i) => i.highest)
248
+ .map((i) => `β€’ ${i.keyword}: 졜고 ${i.highest.region}(${i.highest.value}${i.highest.unit ?? ''}), μ΅œμ € ${i.lowest.region}(${i.lowest.value}${i.lowest.unit ?? ''})`)
249
+ .join('\n'),
250
+ ...(fallbackNotes.length > 0 ? { fallbackNotes } : {}),
251
+ };
252
+ }
253
+ // ═══════════════════════════════════════════════════════════
254
+ // chain_policy_indicator β€” μ •μ±… μ˜μ—­ 묢음 μ‹œκ³„μ—΄
255
+ // ═══════════════════════════════════════════════════════════
256
+ const POLICY_DOMAINS = {
257
+ lowFertility: {
258
+ label: 'μ €μΆœμ‚°',
259
+ indicators: ['μΆœμ‚°μœ¨', 'μΆœμƒμ•„μˆ˜', '혼인건수', 'ν‰κ· μ΄ˆν˜Όμ—°λ Ή'],
260
+ description: 'ν•©κ³„μΆœμ‚°μœ¨Β·μΆœμƒμ•„μˆ˜Β·ν˜ΌμΈκ±΄μˆ˜Β·ν‰κ· μ΄ˆν˜Όμ—°λ Ή',
261
+ },
262
+ aging: {
263
+ label: 'κ³ λ Ήν™”',
264
+ indicators: ['고령인ꡬ', 'λ…Έλ Ήν™”μ§€μˆ˜', 'κΈ°λŒ€μˆ˜λͺ…'],
265
+ description: 'κ³ λ ΉμΈκ΅¬Β·λ…Έλ Ήν™”μ§€μˆ˜Β·κΈ°λŒ€μˆ˜λͺ…',
266
+ },
267
+ housing: {
268
+ label: 'μ£Όκ±°',
269
+ indicators: ['μ•„νŒŒνŠΈκ°€κ²©', '전세가격', '주택가격'],
270
+ description: 'μ•„νŒŒνŠΈ/주택 λ§€λ§€Β·μ „μ„Έ κ°€κ²©μ§€μˆ˜',
271
+ },
272
+ jobs: {
273
+ label: '일자리',
274
+ indicators: ['μ‹€μ—…λ₯ ', '고용λ₯ ', 'μ·¨μ—…μžμˆ˜', 'μ›”κΈ‰'],
275
+ description: 'μ‹€μ—…λ₯ Β·κ³ μš©λ₯ Β·μ·¨μ—…μžμˆ˜Β·μ›”ν‰κ· μž„κΈˆ',
276
+ },
277
+ safety: {
278
+ label: 'μΉ˜μ•ˆΒ·μ•ˆμ „',
279
+ indicators: ['λ²”μ£„μœ¨', 'ꡐ톡사고', '사망λ₯ '],
280
+ description: 'λ²”μ£„μœ¨Β·κ΅ν†΅μ‚¬κ³ Β·μ‚¬λ§λ₯ ',
281
+ },
282
+ health: {
283
+ label: '보건·의료',
284
+ indicators: ['μ˜μ‚¬μˆ˜', 'κΈ°λŒ€μˆ˜λͺ…', '사망λ₯ '],
285
+ description: 'μ˜μ‚¬μˆ˜Β·κΈ°λŒ€μˆ˜λͺ…·사망λ₯ ',
286
+ },
287
+ economy: {
288
+ label: '경제',
289
+ indicators: ['GDP', 'κ²½μ œμ„±μž₯λ₯ ', 'λ¬Όκ°€', '수좜'],
290
+ description: 'GDPΒ·κ²½μ œμ„±μž₯λ₯ Β·λ¬Όκ°€Β·μˆ˜μΆœ',
291
+ },
292
+ };
293
+ export const chainPolicyIndicatorSchema = {
294
+ name: 'chain_policy_indicator',
295
+ description: `[⛓체인] μ •μ±… μ˜μ—­ 묢음 10λ…„ μ‹œκ³„μ—΄ β€” μ €μΆœμ‚°Β·κ³ λ Ήν™”Β·μ£Όκ±°Β·μΌμžλ¦¬Β·μΉ˜μ•ˆΒ·λ³΄κ±΄Β·κ²½μ œ.
296
+
297
+ 🎯 μ‚¬μš© μ‹œμ : "μ €μΆœμ‚° μ •μ±… λΈŒλ¦¬ν”„", "κ³ λ Ήν™” μΆ”μ„Έ 보고", "μ£Όκ±° μ‹œμž₯ 동ν–₯", "일자리 5λ…„ λ³€ν™”"
298
+ πŸ”„ 도ꡬ 비ꡐ:
299
+ β€’ 단일 ν‚€μ›Œλ“œ μΆ”μ„Έ β†’ quick_trend
300
+ β€’ μ§€μ—­ μ’…ν•© λΈŒλ¦¬ν•‘ β†’ chain_region_brief
301
+ β€’ μ •λ°€ 뢄석(차원 λͺ…μ‹œ) β†’ analyze_time_series
302
+
303
+ β–  도메인별 3~4개 μ§€ν‘œ μ‹œκ³„μ—΄ + μΆ”μ„Έ μš”μ•½. μ •μ±…μ„€λͺ…μ„œ/μ—°κ΅¬λ³΄κ³ μ„œ μ²¨λΆ€μš©.
304
+ β–  region 선택. λ―Έμ§€μ • μ‹œ μ „κ΅­. 자치ꡬ β†’ κ΄‘μ—­μ‹œλ„ fallback.`,
305
+ inputSchema: z.object({
306
+ domain: z
307
+ .enum(['lowFertility', 'aging', 'housing', 'jobs', 'safety', 'health', 'economy'])
308
+ .describe('μ •μ±… μ˜μ—­: lowFertility(μ €μΆœμ‚°), aging(κ³ λ Ήν™”), housing(μ£Όκ±°), jobs(일자리), safety(μΉ˜μ•ˆΒ·μ•ˆμ „), health(보건·의료), economy(경제)'),
309
+ region: z.string().optional().describe('μ§€μ—­λͺ… (선택). 자치ꡬ/μ‹œκ΅°μ€ κ΄‘μ—­μ‹œλ„λ‘œ μžλ™ fallback.'),
310
+ yearCount: z
311
+ .number()
312
+ .min(2)
313
+ .max(20)
314
+ .optional()
315
+ .default(10)
316
+ .describe('뢄석 κΈ°κ°„ (λ…„, κΈ°λ³Έ 10)'),
317
+ }),
318
+ };
319
+ export async function chainPolicyIndicator(input) {
320
+ const { domain, region, yearCount } = input;
321
+ const def = POLICY_DOMAINS[domain];
322
+ const results = await Promise.all(def.indicators.map(async (kw) => {
323
+ try {
324
+ const r = await quickTrend({ keyword: kw, region, yearCount });
325
+ const points = r.dataPoints ?? [];
326
+ const first = points[0];
327
+ const last = points[points.length - 1];
328
+ const change = first && last && first.value !== 0
329
+ ? (((last.value - first.value) / Math.abs(first.value)) * 100).toFixed(1)
330
+ : null;
331
+ return {
332
+ keyword: kw,
333
+ region: r.region,
334
+ success: r.success,
335
+ trend: r.trend,
336
+ trendDescription: r.trendDescription,
337
+ startYear: first?.year ?? null,
338
+ endYear: last?.year ?? null,
339
+ startValue: first?.formatted ?? null,
340
+ endValue: last?.formatted ?? null,
341
+ totalChangeRate: change == null ? null : `${parseFloat(change) >= 0 ? '+' : ''}${change}%`,
342
+ dataPoints: points,
343
+ source: r.source?.tableName ?? null,
344
+ note: r.note ?? null,
345
+ };
346
+ }
347
+ catch (e) {
348
+ return {
349
+ keyword: kw,
350
+ success: false,
351
+ error: e instanceof Error ? e.message : String(e),
352
+ };
353
+ }
354
+ }));
355
+ const successItems = results.filter((r) => r.success);
356
+ return {
357
+ success: true,
358
+ domain: def.label,
359
+ domainDescription: def.description,
360
+ region: region || 'μ „κ΅­',
361
+ yearCount,
362
+ indicators: results,
363
+ summary: `πŸ“‘ **${def.label} μ˜μ—­ ${yearCount}λ…„ μΆ”μ„Έ** (${region || 'μ „κ΅­'}, ${successItems.length}/${def.indicators.length} μ§€ν‘œ κ°€μš©)\n` +
364
+ successItems
365
+ .map((r) => `β€’ ${r.keyword}: ${r.trendDescription} (${r.startYear}β†’${r.endYear}λ…„, ${r.totalChangeRate ?? '-'})`)
366
+ .join('\n'),
367
+ };
368
+ }
369
+ //# sourceMappingURL=chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../src/tools/chains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * 톡계 비ꡐ 도ꡬ
3
+ * μ—¬λŸ¬ μ§€μ—­ λ˜λŠ” μ‹œμ μ˜ 톡계λ₯Ό 비ꡐ
4
+ */
5
+ import { z } from 'zod';
6
+ export declare const compareStatisticsSchema: {
7
+ name: string;
8
+ description: string;
9
+ inputSchema: z.ZodObject<{
10
+ orgId: z.ZodString;
11
+ tableId: z.ZodString;
12
+ compareType: z.ZodEnum<["period", "item"]>;
13
+ periodType: z.ZodEnum<["Y", "M", "Q"]>;
14
+ periods: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
15
+ objL1: z.ZodOptional<z.ZodString>;
16
+ objL2: z.ZodOptional<z.ZodString>;
17
+ itemId: z.ZodOptional<z.ZodString>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ orgId: string;
20
+ tableId: string;
21
+ periodType: "Y" | "Q" | "M";
22
+ compareType: "period" | "item";
23
+ objL1?: string | undefined;
24
+ objL2?: string | undefined;
25
+ itemId?: string | undefined;
26
+ periods?: string[] | undefined;
27
+ }, {
28
+ orgId: string;
29
+ tableId: string;
30
+ periodType: "Y" | "Q" | "M";
31
+ compareType: "period" | "item";
32
+ objL1?: string | undefined;
33
+ objL2?: string | undefined;
34
+ itemId?: string | undefined;
35
+ periods?: string[] | undefined;
36
+ }>;
37
+ };
38
+ export type CompareStatisticsInput = z.infer<typeof compareStatisticsSchema.inputSchema>;
39
+ interface ComparisonItem {
40
+ name: string;
41
+ region?: string;
42
+ itemName?: string;
43
+ period?: string;
44
+ value: number;
45
+ formattedValue: string;
46
+ unit?: string;
47
+ rank?: number;
48
+ change?: {
49
+ rate: number;
50
+ direction: 'up' | 'down' | 'stable';
51
+ formatted: string;
52
+ };
53
+ }
54
+ export declare function compareStatistics(input: CompareStatisticsInput): Promise<{
55
+ success: boolean;
56
+ compareType: string;
57
+ items: ComparisonItem[];
58
+ summary: string;
59
+ insights: string[];
60
+ }>;
61
+ export {};
62
+ //# sourceMappingURL=compareStatistics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compareStatistics.d.ts","sourceRoot":"","sources":["../../src/tools/compareStatistics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAEzF,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;QACpC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAkLD"}