@things-factory/integration-data-go-kr 10.0.0-beta.108
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/README.md +94 -0
- package/ROADMAP.md +282 -0
- package/dist-server/engine/connector/data-go-kr-client.d.ts +27 -0
- package/dist-server/engine/connector/data-go-kr-client.js +138 -0
- package/dist-server/engine/connector/data-go-kr-client.js.map +1 -0
- package/dist-server/engine/connector/data-go-kr-connector.d.ts +29 -0
- package/dist-server/engine/connector/data-go-kr-connector.js +53 -0
- package/dist-server/engine/connector/data-go-kr-connector.js.map +1 -0
- package/dist-server/engine/connector/index.d.ts +1 -0
- package/dist-server/engine/connector/index.js +4 -0
- package/dist-server/engine/connector/index.js.map +1 -0
- package/dist-server/engine/index.d.ts +2 -0
- package/dist-server/engine/index.js +5 -0
- package/dist-server/engine/index.js.map +1 -0
- package/dist-server/engine/spec/building-ledger/hub.d.ts +12 -0
- package/dist-server/engine/spec/building-ledger/hub.js +138 -0
- package/dist-server/engine/spec/building-ledger/hub.js.map +1 -0
- package/dist-server/engine/spec/building-ledger/index.d.ts +7 -0
- package/dist-server/engine/spec/building-ledger/index.js +12 -0
- package/dist-server/engine/spec/building-ledger/index.js.map +1 -0
- package/dist-server/engine/spec/index.d.ts +17 -0
- package/dist-server/engine/spec/index.js +59 -0
- package/dist-server/engine/spec/index.js.map +1 -0
- package/dist-server/engine/spec/types.d.ts +79 -0
- package/dist-server/engine/spec/types.js +30 -0
- package/dist-server/engine/spec/types.js.map +1 -0
- package/dist-server/engine/spec/weather/asos.d.ts +2 -0
- package/dist-server/engine/spec/weather/asos.js +33 -0
- package/dist-server/engine/spec/weather/asos.js.map +1 -0
- package/dist-server/engine/spec/weather/aws.d.ts +2 -0
- package/dist-server/engine/spec/weather/aws.js +28 -0
- package/dist-server/engine/spec/weather/aws.js.map +1 -0
- package/dist-server/engine/spec/weather/index.d.ts +14 -0
- package/dist-server/engine/spec/weather/index.js +23 -0
- package/dist-server/engine/spec/weather/index.js.map +1 -0
- package/dist-server/engine/spec/weather/mid-term-forecast.d.ts +2 -0
- package/dist-server/engine/spec/weather/mid-term-forecast.js +56 -0
- package/dist-server/engine/spec/weather/mid-term-forecast.js.map +1 -0
- package/dist-server/engine/spec/weather/short-term-forecast.d.ts +2 -0
- package/dist-server/engine/spec/weather/short-term-forecast.js +71 -0
- package/dist-server/engine/spec/weather/short-term-forecast.js.map +1 -0
- package/dist-server/engine/spec/weather/warning.d.ts +2 -0
- package/dist-server/engine/spec/weather/warning.js +34 -0
- package/dist-server/engine/spec/weather/warning.js.map +1 -0
- package/dist-server/engine/task/building-ledger/general.d.ts +30 -0
- package/dist-server/engine/task/building-ledger/general.js +123 -0
- package/dist-server/engine/task/building-ledger/general.js.map +1 -0
- package/dist-server/engine/task/building-ledger/index.d.ts +13 -0
- package/dist-server/engine/task/building-ledger/index.js +16 -0
- package/dist-server/engine/task/building-ledger/index.js.map +1 -0
- package/dist-server/engine/task/building-ledger/summary.d.ts +95 -0
- package/dist-server/engine/task/building-ledger/summary.js +174 -0
- package/dist-server/engine/task/building-ledger/summary.js.map +1 -0
- package/dist-server/engine/task/call.d.ts +40 -0
- package/dist-server/engine/task/call.js +144 -0
- package/dist-server/engine/task/call.js.map +1 -0
- package/dist-server/engine/task/index.d.ts +20 -0
- package/dist-server/engine/task/index.js +23 -0
- package/dist-server/engine/task/index.js.map +1 -0
- package/dist-server/engine/task/weather/grid-converter.d.ts +24 -0
- package/dist-server/engine/task/weather/grid-converter.js +69 -0
- package/dist-server/engine/task/weather/grid-converter.js.map +1 -0
- package/dist-server/engine/task/weather/index.d.ts +13 -0
- package/dist-server/engine/task/weather/index.js +18 -0
- package/dist-server/engine/task/weather/index.js.map +1 -0
- package/dist-server/engine/task/weather/short-term-forecast.d.ts +38 -0
- package/dist-server/engine/task/weather/short-term-forecast.js +99 -0
- package/dist-server/engine/task/weather/short-term-forecast.js.map +1 -0
- package/dist-server/engine/types.d.ts +63 -0
- package/dist-server/engine/types.js +9 -0
- package/dist-server/engine/types.js.map +1 -0
- package/dist-server/index.d.ts +6 -0
- package/dist-server/index.js +13 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/helps/integration/connector/data-go-kr-connector.md +38 -0
- package/helps/integration/services/building-ledger.md +110 -0
- package/helps/integration/services/weather.md +82 -0
- package/helps/integration/task/building-ledger.md +135 -0
- package/helps/integration/task/data-go-kr-call.md +114 -0
- package/helps/integration/task/weather-short-term-forecast.md +96 -0
- package/package.json +28 -0
- package/server/engine/connector/data-go-kr-client.ts +157 -0
- package/server/engine/connector/data-go-kr-connector.ts +72 -0
- package/server/engine/connector/index.ts +1 -0
- package/server/engine/index.ts +2 -0
- package/server/engine/spec/building-ledger/hub.ts +143 -0
- package/server/engine/spec/building-ledger/index.ts +7 -0
- package/server/engine/spec/index.ts +62 -0
- package/server/engine/spec/types.ts +84 -0
- package/server/engine/spec/weather/asos.ts +32 -0
- package/server/engine/spec/weather/aws.ts +27 -0
- package/server/engine/spec/weather/index.ts +14 -0
- package/server/engine/spec/weather/mid-term-forecast.ts +56 -0
- package/server/engine/spec/weather/short-term-forecast.ts +73 -0
- package/server/engine/spec/weather/warning.ts +33 -0
- package/server/engine/task/building-ledger/general.ts +141 -0
- package/server/engine/task/building-ledger/index.ts +13 -0
- package/server/engine/task/building-ledger/summary.ts +277 -0
- package/server/engine/task/call.ts +177 -0
- package/server/engine/task/index.ts +20 -0
- package/server/engine/task/weather/grid-converter.ts +79 -0
- package/server/engine/task/weather/index.ts +14 -0
- package/server/engine/task/weather/short-term-forecast.ts +110 -0
- package/server/engine/types.ts +64 -0
- package/server/index.ts +7 -0
- package/things-factory.config.js +1 -0
- package/translations/en.json +18 -0
- package/translations/ja.json +18 -0
- package/translations/ko.json +18 -0
- package/translations/ms.json +18 -0
- package/translations/zh.json +18 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mid-term-forecast.js","sourceRoot":"","sources":["../../../../server/engine/spec/weather/mid-term-forecast.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,MAAM,YAAY,GAAyB;IACzC;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,IAAI;QACd,WAAW,EACT,mFAAmF;QACrF,OAAO,EAAE,UAAU;KACpB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,qCAAqC;QAClD,OAAO,EAAE,cAAc;KACxB;CACF,CAAA;AAEY,QAAA,yBAAyB,GAAgB;IACpD,SAAS,EAAE,4BAA4B;IACvC,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,+BAA+B;IAC5C,QAAQ,EAAE,iDAAiD;IAC3D,UAAU,EAAE;QACV,UAAU,EAAE;YACV,WAAW,EAAE,YAAY;YACzB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,kBAAkB;YAC/B,MAAM,EAAE,YAAY;SACrB;QACD,cAAc,EAAE;YACd,WAAW,EAAE,gBAAgB;YAC7B,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,2BAA2B;YACxC,MAAM,EAAE,YAAY;SACrB;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,UAAU;YACvB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,wBAAwB;YACrC,MAAM,EAAE,YAAY;SACrB;QACD,aAAa,EAAE;YACb,WAAW,EAAE,eAAe;YAC5B,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,kBAAkB;YAC/B,MAAM,EAAE,YAAY;SACrB;KACF;CACF,CAAA","sourcesContent":["import { OperationParamSpec, ServiceSpec } from '../types'\n\n/**\n * 기상청_중기예보 조회서비스 (data.go.kr 데이터셋 15059468).\n *\n * 3~10일 전망. 광역 권역(regId) 단위로 06·18시 발표.\n */\nconst sharedParams: OperationParamSpec[] = [\n {\n name: 'regId',\n required: true,\n description:\n '광역 권역 코드. 육상은 `11B00000`(서울/인천/경기) 등, 기온은 `11B10101`(서울) 등 더 세분화. KMA 권역 코드 표 참조.',\n example: '11B00000'\n },\n {\n name: 'tmFc',\n required: true,\n length: 12,\n description: '발표시각 YYYYMMDDHHMM. 중기예보는 06·18시 발표.',\n example: '202604250600'\n }\n]\n\nexport const KmaMidTermForecastService: ServiceSpec = {\n serviceId: '1360000/MidFcstInfoService',\n label: '기상청_중기예보 조회서비스',\n description: '3~10일 중기예보. 육상·기온·해상 별 오퍼레이션.',\n homepage: 'https://www.data.go.kr/data/15059468/openapi.do',\n operations: {\n getMidFcst: {\n operationId: 'getMidFcst',\n label: '중기예보 종합',\n description: '중기 전망 텍스트 (해석본).',\n params: sharedParams\n },\n getMidLandFcst: {\n operationId: 'getMidLandFcst',\n label: '육상 중기예보',\n description: '육상 권역의 강수확률·하늘상태 (3~10일).',\n params: sharedParams\n },\n getMidTa: {\n operationId: 'getMidTa',\n label: '중기 기온예보',\n description: '아침 최저·낮 최고 기온 (3~10일).',\n params: sharedParams\n },\n getMidSeaFcst: {\n operationId: 'getMidSeaFcst',\n label: '해상 중기예보',\n description: '해상 권역의 풍향·풍속·파고.',\n params: sharedParams\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KmaShortTermForecastService = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 기상청_단기예보 조회서비스 v2 (data.go.kr 데이터셋 15084084).
|
|
6
|
+
*
|
|
7
|
+
* 동네예보 + 초단기예보 + 초단기실황. 모두 KMA 5km 격자좌표(nx, ny) 기준.
|
|
8
|
+
*/
|
|
9
|
+
const sharedParams = [
|
|
10
|
+
{
|
|
11
|
+
name: 'base_date',
|
|
12
|
+
label: 'label.base-date',
|
|
13
|
+
required: true,
|
|
14
|
+
length: 8,
|
|
15
|
+
description: '발표일자 YYYYMMDD',
|
|
16
|
+
example: '20260425'
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'base_time',
|
|
20
|
+
label: 'label.base-time',
|
|
21
|
+
required: true,
|
|
22
|
+
length: 4,
|
|
23
|
+
description: '발표시각 HHMM. 단기예보는 0200·0500·0800·1100·1400·1700·2000·2300, 초단기 시리즈는 매시각 정시.',
|
|
24
|
+
example: '1100'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'nx',
|
|
28
|
+
label: 'label.nx',
|
|
29
|
+
required: true,
|
|
30
|
+
description: 'KMA 5km 격자 X좌표 (위경도 → 격자 변환은 task/weather/grid-converter 헬퍼).',
|
|
31
|
+
example: '60'
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'ny',
|
|
35
|
+
label: 'label.ny',
|
|
36
|
+
required: true,
|
|
37
|
+
description: 'KMA 5km 격자 Y좌표.',
|
|
38
|
+
example: '127'
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
exports.KmaShortTermForecastService = {
|
|
42
|
+
serviceId: '1360000/VilageFcstInfoService_2.0',
|
|
43
|
+
label: '기상청_단기예보 조회서비스',
|
|
44
|
+
description: '동네예보(3일치)·초단기예보(6시간)·초단기실황 3개 오퍼레이션. KMA 5km 격자좌표 기준.',
|
|
45
|
+
homepage: 'https://www.data.go.kr/data/15084084/openapi.do',
|
|
46
|
+
operations: {
|
|
47
|
+
getVilageFcst: {
|
|
48
|
+
operationId: 'getVilageFcst',
|
|
49
|
+
label: '단기예보 조회',
|
|
50
|
+
description: '동네예보. 02·05·08·11·14·17·20·23시 (각 +10분 후 제공) 발표, 3일치 3시간 간격 카테고리 (POP·PCP·SKY·REH·T1H·UUU·VVV·VEC·WSD·TMN·TMX 등).',
|
|
51
|
+
params: sharedParams,
|
|
52
|
+
responseNotes: 'items.item 이 (카테고리×시점) 조합으로 매우 많이 반환됨 (3일치 약 800+건). numOfRows 를 충분히 크게 (1000+) 잡거나 페이징.',
|
|
53
|
+
externalDocsUrl: 'https://www.data.go.kr/data/15084084/openapi.do'
|
|
54
|
+
},
|
|
55
|
+
getUltraSrtFcst: {
|
|
56
|
+
operationId: 'getUltraSrtFcst',
|
|
57
|
+
label: '초단기예보 조회',
|
|
58
|
+
description: '발표시각 +45분 후 제공. 매시각 발표. 향후 6시간 예보 (1시간 단위).',
|
|
59
|
+
params: sharedParams,
|
|
60
|
+
externalDocsUrl: 'https://www.data.go.kr/data/15084084/openapi.do'
|
|
61
|
+
},
|
|
62
|
+
getUltraSrtNcst: {
|
|
63
|
+
operationId: 'getUltraSrtNcst',
|
|
64
|
+
label: '초단기실황 조회',
|
|
65
|
+
description: '발표시각 +10분 후 제공. 매시각 발표. 현재 관측값 (T1H·RN1·UUU·VVV·REH·PTY·VEC·WSD).',
|
|
66
|
+
params: sharedParams,
|
|
67
|
+
externalDocsUrl: 'https://www.data.go.kr/data/15084084/openapi.do'
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=short-term-forecast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-term-forecast.js","sourceRoot":"","sources":["../../../../server/engine/spec/weather/short-term-forecast.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,MAAM,YAAY,GAAyB;IACzC;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,eAAe;QAC5B,OAAO,EAAE,UAAU;KACpB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,CAAC;QACT,WAAW,EACT,4EAA4E;QAC9E,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,+DAA+D;QAC5E,OAAO,EAAE,IAAI;KACd;IACD;QACE,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,iBAAiB;QAC9B,OAAO,EAAE,KAAK;KACf;CACF,CAAA;AAEY,QAAA,2BAA2B,GAAgB;IACtD,SAAS,EAAE,mCAAmC;IAC9C,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,uDAAuD;IACpE,QAAQ,EAAE,iDAAiD;IAC3D,UAAU,EAAE;QACV,aAAa,EAAE;YACb,WAAW,EAAE,eAAe;YAC5B,KAAK,EAAE,SAAS;YAChB,WAAW,EACT,mHAAmH;YACrH,MAAM,EAAE,YAAY;YACpB,aAAa,EACX,0FAA0F;YAC5F,eAAe,EAAE,iDAAiD;SACnE;QACD,eAAe,EAAE;YACf,WAAW,EAAE,iBAAiB;YAC9B,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,6CAA6C;YAC1D,MAAM,EAAE,YAAY;YACpB,eAAe,EAAE,iDAAiD;SACnE;QACD,eAAe,EAAE;YACf,WAAW,EAAE,iBAAiB;YAC9B,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,mEAAmE;YAChF,MAAM,EAAE,YAAY;YACpB,eAAe,EAAE,iDAAiD;SACnE;KACF;CACF,CAAA","sourcesContent":["import { OperationParamSpec, ServiceSpec } from '../types'\n\n/**\n * 기상청_단기예보 조회서비스 v2 (data.go.kr 데이터셋 15084084).\n *\n * 동네예보 + 초단기예보 + 초단기실황. 모두 KMA 5km 격자좌표(nx, ny) 기준.\n */\nconst sharedParams: OperationParamSpec[] = [\n {\n name: 'base_date',\n label: 'label.base-date',\n required: true,\n length: 8,\n description: '발표일자 YYYYMMDD',\n example: '20260425'\n },\n {\n name: 'base_time',\n label: 'label.base-time',\n required: true,\n length: 4,\n description:\n '발표시각 HHMM. 단기예보는 0200·0500·0800·1100·1400·1700·2000·2300, 초단기 시리즈는 매시각 정시.',\n example: '1100'\n },\n {\n name: 'nx',\n label: 'label.nx',\n required: true,\n description: 'KMA 5km 격자 X좌표 (위경도 → 격자 변환은 task/weather/grid-converter 헬퍼).',\n example: '60'\n },\n {\n name: 'ny',\n label: 'label.ny',\n required: true,\n description: 'KMA 5km 격자 Y좌표.',\n example: '127'\n }\n]\n\nexport const KmaShortTermForecastService: ServiceSpec = {\n serviceId: '1360000/VilageFcstInfoService_2.0',\n label: '기상청_단기예보 조회서비스',\n description: '동네예보(3일치)·초단기예보(6시간)·초단기실황 3개 오퍼레이션. KMA 5km 격자좌표 기준.',\n homepage: 'https://www.data.go.kr/data/15084084/openapi.do',\n operations: {\n getVilageFcst: {\n operationId: 'getVilageFcst',\n label: '단기예보 조회',\n description:\n '동네예보. 02·05·08·11·14·17·20·23시 (각 +10분 후 제공) 발표, 3일치 3시간 간격 카테고리 (POP·PCP·SKY·REH·T1H·UUU·VVV·VEC·WSD·TMN·TMX 등).',\n params: sharedParams,\n responseNotes:\n 'items.item 이 (카테고리×시점) 조합으로 매우 많이 반환됨 (3일치 약 800+건). numOfRows 를 충분히 크게 (1000+) 잡거나 페이징.',\n externalDocsUrl: 'https://www.data.go.kr/data/15084084/openapi.do'\n },\n getUltraSrtFcst: {\n operationId: 'getUltraSrtFcst',\n label: '초단기예보 조회',\n description: '발표시각 +45분 후 제공. 매시각 발표. 향후 6시간 예보 (1시간 단위).',\n params: sharedParams,\n externalDocsUrl: 'https://www.data.go.kr/data/15084084/openapi.do'\n },\n getUltraSrtNcst: {\n operationId: 'getUltraSrtNcst',\n label: '초단기실황 조회',\n description: '발표시각 +10분 후 제공. 매시각 발표. 현재 관측값 (T1H·RN1·UUU·VVV·REH·PTY·VEC·WSD).',\n params: sharedParams,\n externalDocsUrl: 'https://www.data.go.kr/data/15084084/openapi.do'\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KmaWeatherWarningService = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 기상청_기상특보 조회서비스 (data.go.kr 데이터셋 15059092).
|
|
6
|
+
*
|
|
7
|
+
* 호우·태풍·강풍·풍랑·대설 등 특보의 발효 현황 및 상세 내용.
|
|
8
|
+
*/
|
|
9
|
+
const sharedParams = [
|
|
10
|
+
{ name: 'stnId', required: true, description: '발표 관할 지점 ID. 전국=108. KMA 지점 코드 표 참조.', example: '108' },
|
|
11
|
+
{ name: 'fromTmFc', required: true, length: 8, description: '검색시작일 YYYYMMDD', example: '20260425' },
|
|
12
|
+
{ name: 'toTmFc', required: true, length: 8, description: '검색종료일 YYYYMMDD', example: '20260425' }
|
|
13
|
+
];
|
|
14
|
+
exports.KmaWeatherWarningService = {
|
|
15
|
+
serviceId: '1360000/WthrWrnInfoService',
|
|
16
|
+
label: '기상청_기상특보 조회서비스',
|
|
17
|
+
description: '기상특보(호우·태풍·강풍·풍랑·대설 등) 발효 현황 및 상세 내용 조회.',
|
|
18
|
+
homepage: 'https://www.data.go.kr/data/15059092/openapi.do',
|
|
19
|
+
operations: {
|
|
20
|
+
getWthrWrnList: {
|
|
21
|
+
operationId: 'getWthrWrnList',
|
|
22
|
+
label: '특보 목록 조회',
|
|
23
|
+
description: '발표 시각 범위 내의 특보 목록.',
|
|
24
|
+
params: sharedParams
|
|
25
|
+
},
|
|
26
|
+
getWthrWrnInfo: {
|
|
27
|
+
operationId: 'getWthrWrnInfo',
|
|
28
|
+
label: '특보 상세 조회',
|
|
29
|
+
description: '발효 중인 특정 특보의 상세 발표문.',
|
|
30
|
+
params: sharedParams
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=warning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warning.js","sourceRoot":"","sources":["../../../../server/engine/spec/weather/warning.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,MAAM,YAAY,GAAyB;IACzC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,sCAAsC,EAAE,OAAO,EAAE,KAAK,EAAE;IACtG,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE;IACnG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE;CAClG,CAAA;AAEY,QAAA,wBAAwB,GAAgB;IACnD,SAAS,EAAE,4BAA4B;IACvC,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,0CAA0C;IACvD,QAAQ,EAAE,iDAAiD;IAC3D,UAAU,EAAE;QACV,cAAc,EAAE;YACd,WAAW,EAAE,gBAAgB;YAC7B,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,oBAAoB;YACjC,MAAM,EAAE,YAAY;SACrB;QACD,cAAc,EAAE;YACd,WAAW,EAAE,gBAAgB;YAC7B,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,sBAAsB;YACnC,MAAM,EAAE,YAAY;SACrB;KACF;CACF,CAAA","sourcesContent":["import { OperationParamSpec, ServiceSpec } from '../types'\n\n/**\n * 기상청_기상특보 조회서비스 (data.go.kr 데이터셋 15059092).\n *\n * 호우·태풍·강풍·풍랑·대설 등 특보의 발효 현황 및 상세 내용.\n */\nconst sharedParams: OperationParamSpec[] = [\n { name: 'stnId', required: true, description: '발표 관할 지점 ID. 전국=108. KMA 지점 코드 표 참조.', example: '108' },\n { name: 'fromTmFc', required: true, length: 8, description: '검색시작일 YYYYMMDD', example: '20260425' },\n { name: 'toTmFc', required: true, length: 8, description: '검색종료일 YYYYMMDD', example: '20260425' }\n]\n\nexport const KmaWeatherWarningService: ServiceSpec = {\n serviceId: '1360000/WthrWrnInfoService',\n label: '기상청_기상특보 조회서비스',\n description: '기상특보(호우·태풍·강풍·풍랑·대설 등) 발효 현황 및 상세 내용 조회.',\n homepage: 'https://www.data.go.kr/data/15059092/openapi.do',\n operations: {\n getWthrWrnList: {\n operationId: 'getWthrWrnList',\n label: '특보 목록 조회',\n description: '발표 시각 범위 내의 특보 목록.',\n params: sharedParams\n },\n getWthrWrnInfo: {\n operationId: 'getWthrWrnInfo',\n label: '특보 상세 조회',\n description: '발효 중인 특정 특보의 상세 발표문.',\n params: sharedParams\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Context } from '@things-factory/integration-base';
|
|
2
|
+
import { BuildingLedgerResult } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* 건축물대장 표제부(`getBrTitleInfo`) 조회 태스크.
|
|
5
|
+
*
|
|
6
|
+
* 순수 fetch 만 수행 — 응답 items 를 그대로 반환한다. 다동 필지 집계·단위 변환
|
|
7
|
+
* 같은 도메인 가공은 소비자 측 후속 스텝(data-mapper / jsonata / 자체 태스크) 에서
|
|
8
|
+
* 처리하도록 책임을 분리.
|
|
9
|
+
*
|
|
10
|
+
* 왜 전용 태스크인가:
|
|
11
|
+
* - 범용 `data-go-kr-call` 로도 호출 가능하지만, 필요한 operationRef 와 PNU 5요소
|
|
12
|
+
* 파라미터를 매번 입력하는 대신 파라미터 폼을 명시적으로 제공해 운영/시나리오
|
|
13
|
+
* 작성 부담을 줄인다.
|
|
14
|
+
* - 건축물대장은 dssp/dkpi·건산연·공인중개·자산관리 등 자주 쓰이는 도메인이므로
|
|
15
|
+
* 범용보다 한 단계 전용화된 표면을 둘 가치가 충분.
|
|
16
|
+
*/
|
|
17
|
+
declare function BuildingLedgerTask(step: any, context: Context): Promise<{
|
|
18
|
+
data: BuildingLedgerResult;
|
|
19
|
+
}>;
|
|
20
|
+
declare namespace BuildingLedgerTask {
|
|
21
|
+
var parameterSpec: {
|
|
22
|
+
type: string;
|
|
23
|
+
name: string;
|
|
24
|
+
label: string;
|
|
25
|
+
placeholder: string;
|
|
26
|
+
description: string;
|
|
27
|
+
}[];
|
|
28
|
+
var help: string;
|
|
29
|
+
}
|
|
30
|
+
export default BuildingLedgerTask;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const integration_base_1 = require("@things-factory/integration-base");
|
|
4
|
+
const building_ledger_1 = require("../../spec/building-ledger");
|
|
5
|
+
/**
|
|
6
|
+
* 건축물대장 표제부(`getBrTitleInfo`) 조회 태스크.
|
|
7
|
+
*
|
|
8
|
+
* 순수 fetch 만 수행 — 응답 items 를 그대로 반환한다. 다동 필지 집계·단위 변환
|
|
9
|
+
* 같은 도메인 가공은 소비자 측 후속 스텝(data-mapper / jsonata / 자체 태스크) 에서
|
|
10
|
+
* 처리하도록 책임을 분리.
|
|
11
|
+
*
|
|
12
|
+
* 왜 전용 태스크인가:
|
|
13
|
+
* - 범용 `data-go-kr-call` 로도 호출 가능하지만, 필요한 operationRef 와 PNU 5요소
|
|
14
|
+
* 파라미터를 매번 입력하는 대신 파라미터 폼을 명시적으로 제공해 운영/시나리오
|
|
15
|
+
* 작성 부담을 줄인다.
|
|
16
|
+
* - 건축물대장은 dssp/dkpi·건산연·공인중개·자산관리 등 자주 쓰이는 도메인이므로
|
|
17
|
+
* 범용보다 한 단계 전용화된 표면을 둘 가치가 충분.
|
|
18
|
+
*/
|
|
19
|
+
async function BuildingLedgerTask(step, context) {
|
|
20
|
+
const { connection: connectionName, params } = step;
|
|
21
|
+
const { domain, user, data, variables, lng, logger } = context;
|
|
22
|
+
const instance = await integration_base_1.ConnectionManager.getConnectionInstanceByName(domain, connectionName);
|
|
23
|
+
if (!instance?.client) {
|
|
24
|
+
throw new Error(`data-go-kr connection '${connectionName}' is not established.`);
|
|
25
|
+
}
|
|
26
|
+
const scope = { domain, user, lng, data, variables, console };
|
|
27
|
+
const evalString = (value) => {
|
|
28
|
+
if (value === undefined || value === null || value === '')
|
|
29
|
+
return undefined;
|
|
30
|
+
try {
|
|
31
|
+
return (0, integration_base_1.evaluateTemplate)(String(value), scope);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
throw new Error(`data-go-kr-building-ledger: failed to evaluate parameter: ${err.message}`);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const sigunguCd = evalString(params.sigunguCd);
|
|
38
|
+
const bjdongCd = evalString(params.bjdongCd);
|
|
39
|
+
const bun = evalString(params.bun);
|
|
40
|
+
if (!sigunguCd)
|
|
41
|
+
throw new Error('data-go-kr-building-ledger: sigunguCd is required');
|
|
42
|
+
if (!bjdongCd)
|
|
43
|
+
throw new Error('data-go-kr-building-ledger: bjdongCd is required');
|
|
44
|
+
if (!bun)
|
|
45
|
+
throw new Error('data-go-kr-building-ledger: bun is required');
|
|
46
|
+
const servicePath = `${building_ledger_1.BldRgstHubService.serviceId}/getBrTitleInfo`;
|
|
47
|
+
const normalizedParams = {
|
|
48
|
+
sigunguCd,
|
|
49
|
+
bjdongCd,
|
|
50
|
+
platGbCd: evalString(params.platGbCd) || '0',
|
|
51
|
+
bun: zpad(bun, 4),
|
|
52
|
+
ji: zpad(evalString(params.ji) || '0', 4),
|
|
53
|
+
numOfRows: 100,
|
|
54
|
+
pageNo: 1
|
|
55
|
+
};
|
|
56
|
+
logger?.info?.(`[data-go-kr] ${servicePath} params=${JSON.stringify(normalizedParams)}`);
|
|
57
|
+
const items = await instance.client.getItems(servicePath, normalizedParams);
|
|
58
|
+
if (items.length === 0) {
|
|
59
|
+
throw new Error(`data-go-kr-building-ledger: no 표제부 records for PNU ` +
|
|
60
|
+
`${normalizedParams.sigunguCd}-${normalizedParams.bjdongCd}-${normalizedParams.platGbCd}-` +
|
|
61
|
+
`${normalizedParams.bun}-${normalizedParams.ji}. ` +
|
|
62
|
+
`Possible causes: PNU is wrong, building is pre-approval, or the lot has no registered building.`);
|
|
63
|
+
}
|
|
64
|
+
logger?.info?.(`[data-go-kr] items=${items.length} first.bldNm='${items[0].bldNm || ''}'`);
|
|
65
|
+
return { data: { items } };
|
|
66
|
+
}
|
|
67
|
+
function zpad(value, width) {
|
|
68
|
+
const s = String(value);
|
|
69
|
+
return s.length >= width ? s : '0'.repeat(width - s.length) + s;
|
|
70
|
+
}
|
|
71
|
+
/*
|
|
72
|
+
* 컨텍스트 데이터 액세서 사용 예시 (이전 step 의 juso-resolve-address 결과 활용):
|
|
73
|
+
* sigunguCd: `${data.pnu.sigunguCd}`
|
|
74
|
+
* bjdongCd: `${data.pnu.bjdongCd}`
|
|
75
|
+
* platGbCd: `${data.pnu.platGbCd}`
|
|
76
|
+
* bun: `${data.pnu.bun}`
|
|
77
|
+
* ji: `${data.pnu.ji}`
|
|
78
|
+
* 시나리오 흐름: [juso-resolve-address] → data.pnu → [data-go-kr-building-ledger]
|
|
79
|
+
*
|
|
80
|
+
* 모든 파라미터는 evaluateTemplate 로 평가되므로 `${...}` 표현식 그대로 입력 가능.
|
|
81
|
+
*/
|
|
82
|
+
BuildingLedgerTask.parameterSpec = [
|
|
83
|
+
{
|
|
84
|
+
type: 'string',
|
|
85
|
+
name: 'sigunguCd',
|
|
86
|
+
label: 'label.sigungu-cd',
|
|
87
|
+
placeholder: '예) 11680 또는 ${data.pnu.sigunguCd}',
|
|
88
|
+
description: '시군구코드 5자리. 이전 step 결과 액세서 사용 예: `${data.pnu.sigunguCd}`'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'string',
|
|
92
|
+
name: 'bjdongCd',
|
|
93
|
+
label: 'label.bjdong-cd',
|
|
94
|
+
placeholder: '예) 10300 또는 ${data.pnu.bjdongCd}',
|
|
95
|
+
description: '법정동코드 5자리. 이전 step 결과 액세서 사용 예: `${data.pnu.bjdongCd}`'
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: 'string',
|
|
99
|
+
name: 'platGbCd',
|
|
100
|
+
label: 'label.plat-gb-cd',
|
|
101
|
+
placeholder: '0=대지, 1=산, 2=블록 — 또는 ${data.pnu.platGbCd}',
|
|
102
|
+
description: '대지구분 1자리. 정적값 0/1/2 또는 액세서 표현식 입력 가능. ' +
|
|
103
|
+
'juso → PNU 흐름이면 `${data.pnu.platGbCd}`.'
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
type: 'string',
|
|
107
|
+
name: 'bun',
|
|
108
|
+
label: 'label.bun',
|
|
109
|
+
placeholder: '예) 223 또는 ${data.pnu.bun}',
|
|
110
|
+
description: '본번. 자동 4자리 zero-pad. 액세서 사용 예: `${data.pnu.bun}`'
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'string',
|
|
114
|
+
name: 'ji',
|
|
115
|
+
label: 'label.ji',
|
|
116
|
+
placeholder: '예) 0 또는 ${data.pnu.ji}',
|
|
117
|
+
description: '부번. 없으면 0. 자동 4자리 zero-pad. 액세서 사용 예: `${data.pnu.ji}`'
|
|
118
|
+
}
|
|
119
|
+
];
|
|
120
|
+
BuildingLedgerTask.help = 'integration/task/building-ledger';
|
|
121
|
+
integration_base_1.TaskRegistry.registerTaskHandler('data-go-kr-building-ledger', BuildingLedgerTask);
|
|
122
|
+
exports.default = BuildingLedgerTask;
|
|
123
|
+
//# sourceMappingURL=general.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general.js","sourceRoot":"","sources":["../../../../server/engine/task/building-ledger/general.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectionManager, Context, TaskRegistry, evaluateTemplate } from '@things-factory/integration-base'\n\nimport { DataGoKrConnectionInstance } from '../../connector/data-go-kr-connector'\nimport { BldRgstHubService } from '../../spec/building-ledger'\nimport { BrTitleItem, BuildingLedgerResult } from '../../types'\n\n/**\n * 건축물대장 표제부(`getBrTitleInfo`) 조회 태스크.\n *\n * 순수 fetch 만 수행 — 응답 items 를 그대로 반환한다. 다동 필지 집계·단위 변환\n * 같은 도메인 가공은 소비자 측 후속 스텝(data-mapper / jsonata / 자체 태스크) 에서\n * 처리하도록 책임을 분리.\n *\n * 왜 전용 태스크인가:\n * - 범용 `data-go-kr-call` 로도 호출 가능하지만, 필요한 operationRef 와 PNU 5요소\n * 파라미터를 매번 입력하는 대신 파라미터 폼을 명시적으로 제공해 운영/시나리오\n * 작성 부담을 줄인다.\n * - 건축물대장은 dssp/dkpi·건산연·공인중개·자산관리 등 자주 쓰이는 도메인이므로\n * 범용보다 한 단계 전용화된 표면을 둘 가치가 충분.\n */\nasync function BuildingLedgerTask(step, context: Context): Promise<{ data: BuildingLedgerResult }> {\n const { connection: connectionName, params } = step\n const { domain, user, data, variables, lng, logger } = context\n\n const instance: DataGoKrConnectionInstance = await ConnectionManager.getConnectionInstanceByName(\n domain,\n connectionName\n )\n if (!instance?.client) {\n throw new Error(`data-go-kr connection '${connectionName}' is not established.`)\n }\n\n const scope = { domain, user, lng, data, variables, console }\n const evalString = (value: string | undefined) => {\n if (value === undefined || value === null || value === '') return undefined\n try {\n return evaluateTemplate(String(value), scope)\n } catch (err) {\n throw new Error(`data-go-kr-building-ledger: failed to evaluate parameter: ${(err as Error).message}`)\n }\n }\n\n const sigunguCd = evalString(params.sigunguCd)\n const bjdongCd = evalString(params.bjdongCd)\n const bun = evalString(params.bun)\n\n if (!sigunguCd) throw new Error('data-go-kr-building-ledger: sigunguCd is required')\n if (!bjdongCd) throw new Error('data-go-kr-building-ledger: bjdongCd is required')\n if (!bun) throw new Error('data-go-kr-building-ledger: bun is required')\n\n const servicePath = `${BldRgstHubService.serviceId}/getBrTitleInfo`\n\n const normalizedParams = {\n sigunguCd,\n bjdongCd,\n platGbCd: evalString(params.platGbCd) || '0',\n bun: zpad(bun, 4),\n ji: zpad(evalString(params.ji) || '0', 4),\n numOfRows: 100,\n pageNo: 1\n }\n\n logger?.info?.(`[data-go-kr] ${servicePath} params=${JSON.stringify(normalizedParams)}`)\n\n const items: BrTitleItem[] = await instance.client.getItems(servicePath, normalizedParams)\n\n if (items.length === 0) {\n throw new Error(\n `data-go-kr-building-ledger: no 표제부 records for PNU ` +\n `${normalizedParams.sigunguCd}-${normalizedParams.bjdongCd}-${normalizedParams.platGbCd}-` +\n `${normalizedParams.bun}-${normalizedParams.ji}. ` +\n `Possible causes: PNU is wrong, building is pre-approval, or the lot has no registered building.`\n )\n }\n\n logger?.info?.(`[data-go-kr] items=${items.length} first.bldNm='${items[0].bldNm || ''}'`)\n\n return { data: { items } }\n}\n\nfunction zpad(value: string, width: number): string {\n const s = String(value)\n return s.length >= width ? s : '0'.repeat(width - s.length) + s\n}\n\n/*\n * 컨텍스트 데이터 액세서 사용 예시 (이전 step 의 juso-resolve-address 결과 활용):\n * sigunguCd: `${data.pnu.sigunguCd}`\n * bjdongCd: `${data.pnu.bjdongCd}`\n * platGbCd: `${data.pnu.platGbCd}`\n * bun: `${data.pnu.bun}`\n * ji: `${data.pnu.ji}`\n * 시나리오 흐름: [juso-resolve-address] → data.pnu → [data-go-kr-building-ledger]\n *\n * 모든 파라미터는 evaluateTemplate 로 평가되므로 `${...}` 표현식 그대로 입력 가능.\n */\nBuildingLedgerTask.parameterSpec = [\n {\n type: 'string',\n name: 'sigunguCd',\n label: 'label.sigungu-cd',\n placeholder: '예) 11680 또는 ${data.pnu.sigunguCd}',\n description: '시군구코드 5자리. 이전 step 결과 액세서 사용 예: `${data.pnu.sigunguCd}`'\n },\n {\n type: 'string',\n name: 'bjdongCd',\n label: 'label.bjdong-cd',\n placeholder: '예) 10300 또는 ${data.pnu.bjdongCd}',\n description: '법정동코드 5자리. 이전 step 결과 액세서 사용 예: `${data.pnu.bjdongCd}`'\n },\n {\n type: 'string',\n name: 'platGbCd',\n label: 'label.plat-gb-cd',\n placeholder: '0=대지, 1=산, 2=블록 — 또는 ${data.pnu.platGbCd}',\n description:\n '대지구분 1자리. 정적값 0/1/2 또는 액세서 표현식 입력 가능. ' +\n 'juso → PNU 흐름이면 `${data.pnu.platGbCd}`.'\n },\n {\n type: 'string',\n name: 'bun',\n label: 'label.bun',\n placeholder: '예) 223 또는 ${data.pnu.bun}',\n description: '본번. 자동 4자리 zero-pad. 액세서 사용 예: `${data.pnu.bun}`'\n },\n {\n type: 'string',\n name: 'ji',\n label: 'label.ji',\n placeholder: '예) 0 또는 ${data.pnu.ji}',\n description: '부번. 없으면 0. 자동 4자리 zero-pad. 액세서 사용 예: `${data.pnu.ji}`'\n }\n]\n\nBuildingLedgerTask.help = 'integration/task/building-ledger'\n\nTaskRegistry.registerTaskHandler('data-go-kr-building-ledger', BuildingLedgerTask)\n\nexport default BuildingLedgerTask\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 건축물대장 도메인 전용 태스크 그룹.
|
|
3
|
+
*
|
|
4
|
+
* 공통 경로(`data-go-kr-call` + SpecRegistry) 로 커버 가능한 호출은 굳이 전용 태스크를
|
|
5
|
+
* 만들지 말 것 — 이 폴더는 **공통으로 표현하기 어려운 도메인 특화 로직** 이 필요한
|
|
6
|
+
* 태스크만 들어가는 자리이다.
|
|
7
|
+
*
|
|
8
|
+
* 향후 추가 예시:
|
|
9
|
+
* - apt.ts : data-go-kr-building-ledger-apt (집합건축물/아파트 전용)
|
|
10
|
+
* - recap.ts : data-go-kr-building-ledger-recap (총괄표제부 전용 변형)
|
|
11
|
+
*/
|
|
12
|
+
import './general';
|
|
13
|
+
import './summary';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* 건축물대장 도메인 전용 태스크 그룹.
|
|
5
|
+
*
|
|
6
|
+
* 공통 경로(`data-go-kr-call` + SpecRegistry) 로 커버 가능한 호출은 굳이 전용 태스크를
|
|
7
|
+
* 만들지 말 것 — 이 폴더는 **공통으로 표현하기 어려운 도메인 특화 로직** 이 필요한
|
|
8
|
+
* 태스크만 들어가는 자리이다.
|
|
9
|
+
*
|
|
10
|
+
* 향후 추가 예시:
|
|
11
|
+
* - apt.ts : data-go-kr-building-ledger-apt (집합건축물/아파트 전용)
|
|
12
|
+
* - recap.ts : data-go-kr-building-ledger-recap (총괄표제부 전용 변형)
|
|
13
|
+
*/
|
|
14
|
+
require("./general");
|
|
15
|
+
require("./summary");
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/engine/task/building-ledger/index.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;GAUG;AACH,qBAAkB;AAClB,qBAAkB","sourcesContent":["/**\n * 건축물대장 도메인 전용 태스크 그룹.\n *\n * 공통 경로(`data-go-kr-call` + SpecRegistry) 로 커버 가능한 호출은 굳이 전용 태스크를\n * 만들지 말 것 — 이 폴더는 **공통으로 표현하기 어려운 도메인 특화 로직** 이 필요한\n * 태스크만 들어가는 자리이다.\n *\n * 향후 추가 예시:\n * - apt.ts : data-go-kr-building-ledger-apt (집합건축물/아파트 전용)\n * - recap.ts : data-go-kr-building-ledger-recap (총괄표제부 전용 변형)\n */\nimport './general'\nimport './summary'\n"]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Context } from '@things-factory/integration-base';
|
|
2
|
+
import { BrTitleItem } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* 건축물 4 핵심 KPI (연면적·용적률·지상층수·지하층수) 만 **단일 객체** 로 반환하는
|
|
5
|
+
* 요약 태스크. PNU 한 번 입력으로 케이스 (집합·단동) 자동 분기 + 단일값 보장.
|
|
6
|
+
*
|
|
7
|
+
* 내부 흐름:
|
|
8
|
+
* 1) `getBrRecapTitleInfo` (총괄표제부) 호출
|
|
9
|
+
* - 응답 items 가 1건 이상이면 단지 단위 row 그대로 사용 (source='recap')
|
|
10
|
+
* - 0건이면 일반건축물 가능성 → 2 단계로
|
|
11
|
+
* 2) `getBrTitleInfo` (표제부) 호출
|
|
12
|
+
* - items[0] 사용 (source='title')
|
|
13
|
+
* - 단동이면 1건, 다동이면 첫 동 (일반건축물 분기라 보통 단동)
|
|
14
|
+
* 3) 둘 다 0건이면 에러
|
|
15
|
+
*
|
|
16
|
+
* 출력 (`data`):
|
|
17
|
+
* {
|
|
18
|
+
* totArea: number | null, // 연면적 (㎡)
|
|
19
|
+
* vlRat: number | null, // 용적률 (%)
|
|
20
|
+
* grndFlrCnt: number | null, // 지상층수
|
|
21
|
+
* ugrndFlrCnt:number | null, // 지하층수
|
|
22
|
+
* bldNm: string | null,
|
|
23
|
+
* useAprDay: string | null, // 사용승인일 YYYYMMDD
|
|
24
|
+
* source: 'recap' | 'title',
|
|
25
|
+
* raw: BrTitleItem // 원본 (집합·단동 케이스 모두의 단일 row)
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* 시나리오 사용 예 (juso 결합):
|
|
29
|
+
* [juso-resolve-address] → data.pnu
|
|
30
|
+
* [data-go-kr-building-summary]
|
|
31
|
+
* sigunguCd = ${data.pnu.sigunguCd}
|
|
32
|
+
* bjdongCd = ${data.pnu.bjdongCd}
|
|
33
|
+
* platGbCd = ${data.pnu.platGbCd}
|
|
34
|
+
* bun = ${data.pnu.bun}
|
|
35
|
+
* ji = ${data.pnu.ji}
|
|
36
|
+
* 다음 step 에서 ${data.totArea}, ${data.vlRat} 등 직접 접근.
|
|
37
|
+
*/
|
|
38
|
+
export interface BuildingSummary {
|
|
39
|
+
totArea: number | null;
|
|
40
|
+
/** 대지면적 (㎡) — 집합건축물 총괄표제부에 있음 */
|
|
41
|
+
platArea: number | null;
|
|
42
|
+
/** 건축면적 (㎡) */
|
|
43
|
+
archArea: number | null;
|
|
44
|
+
/** 건폐율 (%) */
|
|
45
|
+
bcRat: number | null;
|
|
46
|
+
vlRat: number | null;
|
|
47
|
+
grndFlrCnt: number | null;
|
|
48
|
+
ugrndFlrCnt: number | null;
|
|
49
|
+
/** 주구조 코드 (예: '21'=철근콘크리트구조, '22'=철골철근콘크리트구조(SRC), '14'=프리캐스트콘크리트(PC) …) */
|
|
50
|
+
strctCd: string | null;
|
|
51
|
+
/** 주구조 이름 (예: '철근콘크리트구조', '철골철근콘크리트구조') */
|
|
52
|
+
strctCdNm: string | null;
|
|
53
|
+
/** 기타구조 자유텍스트 (도면상 상세 표기) */
|
|
54
|
+
etcStrct: string | null;
|
|
55
|
+
/** 주용도 코드 (예: '02000'=공동주택, '03000'=제1종근린생활시설 …) */
|
|
56
|
+
mainPurpsCd: string | null;
|
|
57
|
+
/** 주용도 이름 (예: '공동주택', '제1종근린생활시설') — DSSP SiteType 매핑 원천 */
|
|
58
|
+
mainPurpsCdNm: string | null;
|
|
59
|
+
/** 기타용도 자유텍스트 (도면상 상세 표기) */
|
|
60
|
+
etcPurps: string | null;
|
|
61
|
+
/** 세대수 — 집합건축물 */
|
|
62
|
+
hhldCnt: number | null;
|
|
63
|
+
/** 가구수 */
|
|
64
|
+
fmlyCnt: number | null;
|
|
65
|
+
/** 호수 (상가/근린 등) */
|
|
66
|
+
hoCnt: number | null;
|
|
67
|
+
/** 주건축물수 (단지 동 수) — recap 에서 노출 */
|
|
68
|
+
mainBldCnt: number | null;
|
|
69
|
+
/** 부속건축물수 */
|
|
70
|
+
atchBldCnt: number | null;
|
|
71
|
+
/** 건물 높이 (m) */
|
|
72
|
+
heit: number | null;
|
|
73
|
+
bldNm: string | null;
|
|
74
|
+
useAprDay: string | null;
|
|
75
|
+
/** 건축허가일 YYYYMMDD */
|
|
76
|
+
pmsDay: string | null;
|
|
77
|
+
/** 착공일 YYYYMMDD */
|
|
78
|
+
stcnsDay: string | null;
|
|
79
|
+
source: 'recap' | 'title';
|
|
80
|
+
raw: BrTitleItem;
|
|
81
|
+
}
|
|
82
|
+
declare function BuildingSummaryTask(step: any, context: Context): Promise<{
|
|
83
|
+
data: BuildingSummary;
|
|
84
|
+
}>;
|
|
85
|
+
declare namespace BuildingSummaryTask {
|
|
86
|
+
var parameterSpec: {
|
|
87
|
+
type: string;
|
|
88
|
+
name: string;
|
|
89
|
+
label: string;
|
|
90
|
+
placeholder: string;
|
|
91
|
+
description: string;
|
|
92
|
+
}[];
|
|
93
|
+
var help: string;
|
|
94
|
+
}
|
|
95
|
+
export default BuildingSummaryTask;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const integration_base_1 = require("@things-factory/integration-base");
|
|
4
|
+
const building_ledger_1 = require("../../spec/building-ledger");
|
|
5
|
+
async function BuildingSummaryTask(step, context) {
|
|
6
|
+
const { connection: connectionName, params } = step;
|
|
7
|
+
const { domain, user, data, variables, lng, logger } = context;
|
|
8
|
+
const instance = await integration_base_1.ConnectionManager.getConnectionInstanceByName(domain, connectionName);
|
|
9
|
+
if (!instance?.client) {
|
|
10
|
+
throw new Error(`data-go-kr connection '${connectionName}' is not established.`);
|
|
11
|
+
}
|
|
12
|
+
const scope = { domain, user, lng, data, variables, console };
|
|
13
|
+
const evalString = (value) => {
|
|
14
|
+
if (value === undefined || value === null || value === '')
|
|
15
|
+
return undefined;
|
|
16
|
+
try {
|
|
17
|
+
return (0, integration_base_1.evaluateTemplate)(String(value), scope);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
throw new Error(`data-go-kr-building-summary: failed to evaluate parameter: ${err.message}`);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const sigunguCd = evalString(params.sigunguCd);
|
|
24
|
+
const bjdongCd = evalString(params.bjdongCd);
|
|
25
|
+
const bun = evalString(params.bun);
|
|
26
|
+
if (!sigunguCd)
|
|
27
|
+
throw new Error('data-go-kr-building-summary: sigunguCd is required');
|
|
28
|
+
if (!bjdongCd)
|
|
29
|
+
throw new Error('data-go-kr-building-summary: bjdongCd is required');
|
|
30
|
+
if (!bun)
|
|
31
|
+
throw new Error('data-go-kr-building-summary: bun is required');
|
|
32
|
+
const pnu = {
|
|
33
|
+
sigunguCd,
|
|
34
|
+
bjdongCd,
|
|
35
|
+
platGbCd: evalString(params.platGbCd) || '0',
|
|
36
|
+
bun: zpad(bun, 4),
|
|
37
|
+
ji: zpad(evalString(params.ji) || '0', 4),
|
|
38
|
+
numOfRows: 100,
|
|
39
|
+
pageNo: 1
|
|
40
|
+
};
|
|
41
|
+
// 두 API 모두 호출 — recap 결과가 있어도 strctCdNm 등 동 단위 정보는
|
|
42
|
+
// 표제부의 주건축물 row 에서 보완.
|
|
43
|
+
const recapPath = `${building_ledger_1.BldRgstHubService.serviceId}/getBrRecapTitleInfo`;
|
|
44
|
+
const titlePath = `${building_ledger_1.BldRgstHubService.serviceId}/getBrTitleInfo`;
|
|
45
|
+
logger?.info?.(`[data-go-kr] fetch recap + title params=${JSON.stringify(pnu)}`);
|
|
46
|
+
const [recapItems, titleItems] = await Promise.all([
|
|
47
|
+
instance.client
|
|
48
|
+
.getItems(recapPath, pnu)
|
|
49
|
+
.catch(err => {
|
|
50
|
+
logger?.warn?.(`[data-go-kr] recap call failed: ${err.message}`);
|
|
51
|
+
return [];
|
|
52
|
+
}),
|
|
53
|
+
instance.client
|
|
54
|
+
.getItems(titlePath, pnu)
|
|
55
|
+
.catch(err => {
|
|
56
|
+
logger?.warn?.(`[data-go-kr] title call failed: ${err.message}`);
|
|
57
|
+
return [];
|
|
58
|
+
})
|
|
59
|
+
]);
|
|
60
|
+
if (recapItems.length === 0 && titleItems.length === 0) {
|
|
61
|
+
throw new Error(`data-go-kr-building-summary: PNU ${pnu.sigunguCd}-${pnu.bjdongCd}-${pnu.platGbCd}-${pnu.bun}-${pnu.ji} ` +
|
|
62
|
+
`에 대해 총괄표제부·표제부 모두 0건. PNU 오류, 미준공 건물, 또는 미등록 필지 가능성.`);
|
|
63
|
+
}
|
|
64
|
+
// 집합건축물 = recap 있음 → 단지 단위 4 KPI 정확.
|
|
65
|
+
// 일반건축물 = recap 없음 → title 첫 row 가 답.
|
|
66
|
+
// 두 경우 모두 구조정보(strctCdNm 등) 는 title 의 **주건축물** row 에서 가져오는
|
|
67
|
+
// 게 정확. recap 에는 단지 대표 구조가 노출 안 될 수 있음.
|
|
68
|
+
const recap = recapItems[0];
|
|
69
|
+
const mainTitle = titleItems.find(t => t.mainAtchGbCd === '0') || // 주건축물 우선
|
|
70
|
+
titleItems[0];
|
|
71
|
+
const source = recap ? 'recap' : 'title';
|
|
72
|
+
logger?.info?.(`[data-go-kr] summary source=${source} recap=${recapItems.length} title=${titleItems.length} mainBldNm='${mainTitle?.bldNm || ''}'`);
|
|
73
|
+
return { data: toSummary(recap, mainTitle, source) };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 4 KPI + 구조 정보 + 메타를 단일 객체로 추출.
|
|
77
|
+
*
|
|
78
|
+
* - 4 KPI (totArea/vlRat/grndFlrCnt/ugrndFlrCnt) : 집합이면 recap 우선, 단동이면 title.
|
|
79
|
+
* - 구조 정보 (strctCd/Nm/etcStrct) : 동 단위라 title 의 주건축물 row 에서 가져옴.
|
|
80
|
+
* title 에 정보 없으면 recap 에서 fallback.
|
|
81
|
+
*/
|
|
82
|
+
function toSummary(recap, mainTitle, source) {
|
|
83
|
+
const num = (v) => {
|
|
84
|
+
if (v === undefined || v === null || v === '' || v === ' ')
|
|
85
|
+
return null;
|
|
86
|
+
const n = Number(v);
|
|
87
|
+
return Number.isFinite(n) ? n : null;
|
|
88
|
+
};
|
|
89
|
+
const str = (v) => {
|
|
90
|
+
if (v === undefined || v === null)
|
|
91
|
+
return null;
|
|
92
|
+
const s = String(v).trim();
|
|
93
|
+
return s ? s : null;
|
|
94
|
+
};
|
|
95
|
+
// KPI 베이스 — 집합이면 recap, 아니면 title
|
|
96
|
+
const base = recap || mainTitle || {};
|
|
97
|
+
// 구조 — title 의 주건축물 우선, 없으면 recap
|
|
98
|
+
const structSrc = mainTitle || recap || {};
|
|
99
|
+
// 단지 차원 수치 (대지면적/건폐율/세대수/동수 등) 는 recap 에 명시. 단동이면 title.
|
|
100
|
+
return {
|
|
101
|
+
totArea: num(base.totArea),
|
|
102
|
+
platArea: num(base.platArea) || num(structSrc.platArea),
|
|
103
|
+
archArea: num(base.archArea) || num(structSrc.archArea),
|
|
104
|
+
bcRat: num(base.bcRat) || num(structSrc.bcRat),
|
|
105
|
+
vlRat: num(base.vlRat),
|
|
106
|
+
grndFlrCnt: num(base.grndFlrCnt),
|
|
107
|
+
ugrndFlrCnt: num(base.ugrndFlrCnt),
|
|
108
|
+
strctCd: str(structSrc.strctCd) || str(base.strctCd),
|
|
109
|
+
strctCdNm: str(structSrc.strctCdNm) || str(base.strctCdNm),
|
|
110
|
+
etcStrct: str(structSrc.etcStrct) || str(base.etcStrct),
|
|
111
|
+
// 주용도도 구조와 같이 title 의 주건축물 row 가 신뢰할 만함 — 단지 단위 recap
|
|
112
|
+
// 에 단일값으로 노출 안 되는 경우가 있음.
|
|
113
|
+
mainPurpsCd: str(structSrc.mainPurpsCd) || str(base.mainPurpsCd),
|
|
114
|
+
mainPurpsCdNm: str(structSrc.mainPurpsCdNm) || str(base.mainPurpsCdNm),
|
|
115
|
+
etcPurps: str(structSrc.etcPurps) || str(base.etcPurps),
|
|
116
|
+
hhldCnt: num(base.hhldCnt) || num(structSrc.hhldCnt),
|
|
117
|
+
fmlyCnt: num(base.fmlyCnt) || num(structSrc.fmlyCnt),
|
|
118
|
+
hoCnt: num(base.hoCnt) || num(structSrc.hoCnt),
|
|
119
|
+
mainBldCnt: num(base.mainBldCnt) || num(structSrc.mainBldCnt),
|
|
120
|
+
atchBldCnt: num(base.atchBldCnt) || num(structSrc.atchBldCnt),
|
|
121
|
+
heit: num(structSrc.heit) || num(base.heit),
|
|
122
|
+
bldNm: str(base.bldNm) || str(structSrc.bldNm),
|
|
123
|
+
useAprDay: str(base.useAprDay) || str(structSrc.useAprDay),
|
|
124
|
+
pmsDay: str(base.pmsDay) || str(structSrc.pmsDay),
|
|
125
|
+
stcnsDay: str(base.stcnsDay) || str(structSrc.stcnsDay),
|
|
126
|
+
source,
|
|
127
|
+
raw: base
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function zpad(value, width) {
|
|
131
|
+
const s = String(value);
|
|
132
|
+
return s.length >= width ? s : '0'.repeat(width - s.length) + s;
|
|
133
|
+
}
|
|
134
|
+
BuildingSummaryTask.parameterSpec = [
|
|
135
|
+
{
|
|
136
|
+
type: 'string',
|
|
137
|
+
name: 'sigunguCd',
|
|
138
|
+
label: 'label.sigungu-cd',
|
|
139
|
+
placeholder: '예) 11680 또는 ${data.pnu.sigunguCd}',
|
|
140
|
+
description: '시군구코드 5자리. 이전 step 결과 액세서 사용 예: `${data.pnu.sigunguCd}`'
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
type: 'string',
|
|
144
|
+
name: 'bjdongCd',
|
|
145
|
+
label: 'label.bjdong-cd',
|
|
146
|
+
placeholder: '예) 10300 또는 ${data.pnu.bjdongCd}',
|
|
147
|
+
description: '법정동코드 5자리. 이전 step 결과 액세서 사용 예: `${data.pnu.bjdongCd}`'
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
type: 'string',
|
|
151
|
+
name: 'platGbCd',
|
|
152
|
+
label: 'label.plat-gb-cd',
|
|
153
|
+
placeholder: '0=대지, 1=산, 2=블록 — 또는 ${data.pnu.platGbCd}',
|
|
154
|
+
description: '대지구분 1자리. 정적값 0/1/2 또는 액세서 표현식.'
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'string',
|
|
158
|
+
name: 'bun',
|
|
159
|
+
label: 'label.bun',
|
|
160
|
+
placeholder: '예) 223 또는 ${data.pnu.bun}',
|
|
161
|
+
description: '본번. 자동 4자리 zero-pad. 액세서 사용 예: `${data.pnu.bun}`'
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
type: 'string',
|
|
165
|
+
name: 'ji',
|
|
166
|
+
label: 'label.ji',
|
|
167
|
+
placeholder: '예) 0 또는 ${data.pnu.ji}',
|
|
168
|
+
description: '부번. 없으면 0. 자동 4자리 zero-pad. 액세서 사용 예: `${data.pnu.ji}`'
|
|
169
|
+
}
|
|
170
|
+
];
|
|
171
|
+
BuildingSummaryTask.help = 'integration/task/building-summary';
|
|
172
|
+
integration_base_1.TaskRegistry.registerTaskHandler('data-go-kr-building-summary', BuildingSummaryTask);
|
|
173
|
+
exports.default = BuildingSummaryTask;
|
|
174
|
+
//# sourceMappingURL=summary.js.map
|