@dssp/dcsp 1.0.2 → 1.0.6
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/dist-client/bootstrap.js +13 -10
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/components/kpi-2d-lookup-chart.d.ts +50 -0
- package/dist-client/components/kpi-2d-lookup-chart.js +263 -0
- package/dist-client/components/kpi-2d-lookup-chart.js.map +1 -0
- package/dist-client/components/kpi-boxplot-chart.d.ts +31 -0
- package/dist-client/components/kpi-boxplot-chart.js +306 -0
- package/dist-client/components/kpi-boxplot-chart.js.map +1 -0
- package/dist-client/components/kpi-lookup-chart.d.ts +58 -0
- package/dist-client/components/kpi-lookup-chart.js +464 -0
- package/dist-client/components/kpi-lookup-chart.js.map +1 -0
- package/dist-client/components/kpi-mini-trend-chart.d.ts +14 -0
- package/dist-client/components/kpi-mini-trend-chart.js +180 -0
- package/dist-client/components/kpi-mini-trend-chart.js.map +1 -0
- package/dist-client/components/kpi-radar-chart.d.ts +17 -0
- package/dist-client/components/kpi-radar-chart.js +259 -0
- package/dist-client/components/kpi-radar-chart.js.map +1 -0
- package/dist-client/components/kpi-single-boxplot-chart.d.ts +36 -0
- package/dist-client/components/kpi-single-boxplot-chart.js +417 -0
- package/dist-client/components/kpi-single-boxplot-chart.js.map +1 -0
- package/dist-client/components/kpi-step-lookup-chart.d.ts +33 -0
- package/dist-client/components/kpi-step-lookup-chart.js +181 -0
- package/dist-client/components/kpi-step-lookup-chart.js.map +1 -0
- package/dist-client/components/kpi-trend-chart.d.ts +25 -0
- package/dist-client/components/kpi-trend-chart.js +241 -0
- package/dist-client/components/kpi-trend-chart.js.map +1 -0
- package/dist-client/google-map/common-google-map.d.ts +35 -0
- package/dist-client/google-map/common-google-map.js +349 -0
- package/dist-client/google-map/common-google-map.js.map +1 -0
- package/dist-client/google-map/google-map-loader.d.ts +6 -0
- package/dist-client/google-map/google-map-loader.js +23 -0
- package/dist-client/google-map/google-map-loader.js.map +1 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.d.ts +47 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.js +393 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.js.map +1 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.d.ts +18 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.js +696 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +46 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +945 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +34 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +238 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +37 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +689 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +57 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +866 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +69 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +790 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +22 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +344 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.d.ts +21 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +335 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.d.ts +51 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js +693 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js.map +1 -0
- package/dist-client/pages/sv-project-complete.d.ts +31 -0
- package/dist-client/pages/sv-project-complete.js +364 -0
- package/dist-client/pages/sv-project-complete.js.map +1 -0
- package/dist-client/pages/sv-project-detail.d.ts +73 -0
- package/dist-client/pages/sv-project-detail.js +1387 -0
- package/dist-client/pages/sv-project-detail.js.map +1 -0
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +15 -0
- package/dist-client/route.js.map +1 -1
- package/dist-client/shared/complete-api.d.ts +45 -0
- package/dist-client/shared/complete-api.js +274 -0
- package/dist-client/shared/complete-api.js.map +1 -0
- package/dist-client/shared/func.d.ts +2 -0
- package/dist-client/shared/func.js +22 -0
- package/dist-client/shared/func.js.map +1 -0
- package/dist-client/shared/integration-fetch.d.ts +35 -0
- package/dist-client/shared/integration-fetch.js +53 -0
- package/dist-client/shared/integration-fetch.js.map +1 -0
- package/dist-client/shared/kpi-project-sync.d.ts +16 -0
- package/dist-client/shared/kpi-project-sync.js +129 -0
- package/dist-client/shared/kpi-project-sync.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/viewparts/menu-tools.d.ts +7 -0
- package/dist-client/viewparts/menu-tools.js +168 -21
- package/dist-client/viewparts/menu-tools.js.map +1 -1
- package/dist-server/index.d.ts +2 -0
- package/dist-server/index.js +5 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/middlewares/index.d.ts +7 -0
- package/dist-server/middlewares/index.js +100 -0
- package/dist-server/middlewares/index.js.map +1 -0
- package/dist-server/service/index.d.ts +4 -0
- package/dist-server/service/index.js +19 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/kpi-metric-value/index.d.ts +4 -0
- package/dist-server/service/kpi-metric-value/index.js +8 -0
- package/dist-server/service/kpi-metric-value/index.js.map +1 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +198 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +1067 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +15 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +72 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +1 -0
- package/dist-server/service/kpi-stat/index.d.ts +4 -0
- package/dist-server/service/kpi-stat/index.js +8 -0
- package/dist-server/service/kpi-stat/index.js.map +1 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.d.ts +13 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.js +751 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.js.map +1 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.d.ts +32 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.js +126 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.js.map +1 -0
- package/dist-server/service/kpi-value/index.d.ts +3 -0
- package/dist-server/service/kpi-value/index.js +7 -0
- package/dist-server/service/kpi-value/index.js.map +1 -0
- package/dist-server/service/kpi-value/kpi-value-query.d.ts +8 -0
- package/dist-server/service/kpi-value/kpi-value-query.js +90 -0
- package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
- package/python/RUNNER_CONVERSION_GUIDE.md +81 -0
- package/python/doc_summary_engine_handoff/.env.example +21 -0
- package/python/doc_summary_engine_handoff/HANDOFF.md +266 -0
- package/python/doc_summary_engine_handoff/README.md +71 -0
- package/python/doc_summary_engine_handoff/__main__.py +159 -0
- package/python/doc_summary_engine_handoff/api.py +165 -0
- package/python/doc_summary_engine_handoff/extract.py +290 -0
- package/python/doc_summary_engine_handoff/requirements.txt +15 -0
- package/python/doc_summary_engine_handoff/summarize.py +247 -0
- package/python/inspection_ai_engine_handoff/.env.example +22 -0
- package/python/inspection_ai_engine_handoff/HANDOFF.md +541 -0
- package/python/inspection_ai_engine_handoff/README.md +83 -0
- package/python/inspection_ai_engine_handoff/__main__.py +169 -0
- package/python/inspection_ai_engine_handoff/activities.py +147 -0
- package/python/inspection_ai_engine_handoff/api.py +273 -0
- package/python/inspection_ai_engine_handoff/checklist.py +53 -0
- package/python/inspection_ai_engine_handoff/cv_handlers.py +46 -0
- package/python/inspection_ai_engine_handoff/cv_model_registry.py +252 -0
- package/python/inspection_ai_engine_handoff/cv_models/README.md +58 -0
- package/python/inspection_ai_engine_handoff/cv_models/_example_frame_alignment/handler.py +39 -0
- package/python/inspection_ai_engine_handoff/cv_models/_example_frame_alignment/model.json +22 -0
- package/python/inspection_ai_engine_handoff/engine.py +333 -0
- package/python/inspection_ai_engine_handoff/requirements.txt +12 -0
- package/python/inspection_ai_engine_handoff/router.py +200 -0
- package/python/inspection_ai_engine_handoff/shot_catalog.py +79 -0
- package/python/inspection_ai_engine_handoff/shot_planner.py +278 -0
- package/python/inspection_ai_engine_handoff/vlm.py +335 -0
- package/python/spec-matching-0.5.5/README.md +113 -0
- package/python/spec-matching-0.5.5/__main__.py +331 -0
- package/python/spec-matching-0.5.5/kcs.csv +6028 -0
- package/python/spec-matching-0.5.5/kcs_embeddings.meta.json +1 -0
- package/python/spec-matching-0.5.5/kcs_embeddings.npy +0 -0
- package/python/spec-matching-0.5.5/requirements.txt +3 -0
- package/python/spec-matching-0.5.5//342/230/2057 SF-TD4 /341/204/221/341/205/263/341/204/205/341/205/251/341/204/200/341/205/263/341/204/205/341/205/242/341/206/267/341/204/211/341/205/245/341/206/257/341/204/200/341/205/250/341/204/211/341/205/245 /341/204/213/341/205/243/341/206/274/341/204/211/341/205/265/341/206/250_V1.0.hwp +0 -0
- package/schema.graphql +1274 -22
- package/things-factory.config.js +7 -1
- package/translations/en.json +2 -0
- package/translations/ja.json +2 -0
- package/translations/ko.json +2 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { KpiMetricValue, KpiMetricValuePatch } from '@things-factory/kpi';
|
|
2
|
+
import { Attachment, NewAttachment } from '@things-factory/attachment-base';
|
|
3
|
+
/**
|
|
4
|
+
* 외부 시스템 데이터 수집 결과 — 시스템별 한 row.
|
|
5
|
+
* UI "자동 수집" 버튼이 시나리오 호출 후 시스템별 성공·오류 표시에 사용.
|
|
6
|
+
*/
|
|
7
|
+
declare class ExternalDataCollectionResult {
|
|
8
|
+
source: string;
|
|
9
|
+
label: string;
|
|
10
|
+
ok: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
data?: any;
|
|
13
|
+
}
|
|
14
|
+
export declare class KpiMetricValueMutation {
|
|
15
|
+
updateKpiMetricValuesCumulative(patches: KpiMetricValuePatch[], context: ResolverContext): Promise<KpiMetricValue[]>;
|
|
16
|
+
updateKpiMetricValuesAssessment(patches: KpiMetricValuePatch[], context: ResolverContext): Promise<KpiMetricValue[]>;
|
|
17
|
+
/**
|
|
18
|
+
* KpiMetricValue 의 unique 조합 (domain, metric, valueDate, org) 기준 진짜 upsert.
|
|
19
|
+
*
|
|
20
|
+
* 기존 mutation 의 `repo.save({...patch})` 는 patch.id 만 보고 update/insert 결정해
|
|
21
|
+
* 같은 metric × 같은 valueDate × 같은 org 인데 patch.id 가 새 UUID 인 경우 unique
|
|
22
|
+
* 인덱스 (ix_kpi_metric_value_latest) 위반 에러 또는 row 누적 위험. 정확한 upsert
|
|
23
|
+
* 동작을 보장하기 위해 조합 lookup → 기존 id 사용 → save.
|
|
24
|
+
*
|
|
25
|
+
* 월별 metric (periodType=MONTH, valueDate=YYYY-MM-01) 의 단일 row 정책을 자연 충족.
|
|
26
|
+
*
|
|
27
|
+
* **도메인 컨텍스트 스위치**: caller (운영자) 가 system 도메인일 수 있어 patch.org
|
|
28
|
+
* (= projectId) 로 프로젝트 테넌트 도메인을 lookup 해 그 컨텍스트로 저장. 모든
|
|
29
|
+
* patch 가 같은 projectId 라 가정 (한 번의 mutation = 한 프로젝트의 값들).
|
|
30
|
+
*/
|
|
31
|
+
private upsertKpiMetricValues;
|
|
32
|
+
updateKpiMetricValuesSentiment(attachment: NewAttachment, context: ResolverContext): Promise<Attachment | null>;
|
|
33
|
+
/**
|
|
34
|
+
* FileUpload 스트림을 버퍼로 읽기
|
|
35
|
+
*/
|
|
36
|
+
private readFileToBuffer;
|
|
37
|
+
/**
|
|
38
|
+
* Buffer로부터 FileUpload 객체 생성
|
|
39
|
+
*/
|
|
40
|
+
private createFileUploadFromBuffer;
|
|
41
|
+
/**
|
|
42
|
+
* operator-runner 서비스 호출 (Buffer 사용)
|
|
43
|
+
*/
|
|
44
|
+
private callOperatorRunnerServiceWithBuffer;
|
|
45
|
+
/**
|
|
46
|
+
* 메트릭 값 저장
|
|
47
|
+
*/
|
|
48
|
+
private saveMetricValue;
|
|
49
|
+
finalizeProjectWithKpiRecalculation(projectId: string, context: ResolverContext): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* 완공 처리 없이 KPI 만 재계산 — 진행 중 프로젝트의 중간 결과 산정 용도.
|
|
52
|
+
* DB 에 이미 저장된 KpiMetricValue 만 가지고 formula 평가. 외부 시나리오 (juso/
|
|
53
|
+
* allbaro/kiscon) 자동 수집은 의도적으로 호출하지 않음 — 외부 수집은 사용자가
|
|
54
|
+
* "자동 수집" 버튼 (`collectProjectExternalData`) 으로 명시적으로 실행하는 흐름.
|
|
55
|
+
* 권한은 `kpi:recalculate` 로 분리해 finalize 보다 가볍게 부여 가능.
|
|
56
|
+
*/
|
|
57
|
+
recalculateProjectKpi(projectId: string, context: ResolverContext): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* UI "자동 수집" 버튼 전용 mutation. 외부 시스템 3종 시나리오를 순차 호출하고
|
|
60
|
+
* 시스템별 성공/실패 + 메시지를 반환. UI 는 결과를 보고 카드별 상태 (성공·오류) 를 표시.
|
|
61
|
+
*
|
|
62
|
+
* 시나리오는 도메인 EnvVar (주소·자격증명·서비스키 등) 만으로 동작하므로 파라미터 X.
|
|
63
|
+
* 한 시스템 실패가 다른 시스템 수집을 막지 않도록 try/catch 로 격리.
|
|
64
|
+
*
|
|
65
|
+
* 운영 현실: 키스콘·올바로는 시공사 ID/PW 가 자주 미확보 → 오류 흔함. 세움터는 공공
|
|
66
|
+
* 데이터 서비스키만으로 동작 가능. UI 는 시스템별로 명확한 오류 메시지 노출.
|
|
67
|
+
*/
|
|
68
|
+
collectProjectExternalData(projectId: string, context: ResolverContext): Promise<ExternalDataCollectionResult[]>;
|
|
69
|
+
/**
|
|
70
|
+
* 프로젝트 정보 수정 화면의 "정보 연동" 버튼 전용 — 세움터 수집.
|
|
71
|
+
* BuildingComplex 기본 속성 (area / floorAreaRatio / siteType / structureType /
|
|
72
|
+
* coverageRatio / householdCount 등) 자동 채움 목적.
|
|
73
|
+
*
|
|
74
|
+
* **완공/완공전 케이스 통합**: 완공 단지는 건축물대장, 완공 전(택지지구·정비사업 블록)
|
|
75
|
+
* 단지는 주택인허가에 연면적이 있다. `collectSaeumteo` 가 주소 하나로 대장 → (연면적
|
|
76
|
+
* 없으면) 인허가 순으로 시도해 하나의 세움터 결과로 반환.
|
|
77
|
+
*
|
|
78
|
+
* address 인자가 있으면 시나리오 실행 전에 canonical EnvVar 로 upsert — 운영자가 폼에서
|
|
79
|
+
* 방금 입력한 주소를 시나리오가 곧바로 사용. (블록형이면 `…블럭 (단지명)` 형태.)
|
|
80
|
+
*
|
|
81
|
+
* **도메인 스위치**: mutation 호출은 system / 운영자 도메인에서 일어나지만 시나리오·
|
|
82
|
+
* EnvVar 는 **프로젝트가 속한 도메인** 에 있어야 자연. project.domain 으로 컨텍스트
|
|
83
|
+
* 스위치 후 그 도메인에서 EnvVar upsert + 시나리오 실행.
|
|
84
|
+
*/
|
|
85
|
+
collectProjectBasicInfo(projectId: string, address: string, context: ResolverContext): Promise<ExternalDataCollectionResult>;
|
|
86
|
+
/**
|
|
87
|
+
* mutation 호출이 system / 운영자 도메인에서 일어나도 시나리오·EnvVar 는 **프로젝트
|
|
88
|
+
* 테넌트 도메인** 에서 동작해야 자연. project.code 로 자식 (테넌트) 도메인을 찾아
|
|
89
|
+
* 컨텍스트 사본 만들어 반환.
|
|
90
|
+
*
|
|
91
|
+
* 테넌트 도메인 매핑: Domain.subdomain = project.code AND Domain.extType = 'project'
|
|
92
|
+
* (promoteProjectToTenant mutation 이 그렇게 생성). project.domain 자체는 부모
|
|
93
|
+
* 도메인이라 외부 연동 EnvVar 가 거기 있을 일이 없어 사용 부적합.
|
|
94
|
+
*
|
|
95
|
+
* 테넌트 도메인이 없거나 (= 아직 승격 안 됨) project.code 가 비어있으면 원본
|
|
96
|
+
* 컨텍스트 그대로 반환 (방어). project 자체가 없으면 throw.
|
|
97
|
+
*/
|
|
98
|
+
private switchToProjectDomain;
|
|
99
|
+
/**
|
|
100
|
+
* 컨텍스트의 도메인에 EnvVar 1개 upsert. 시나리오가 도메인 EnvVar 를 우선 참조하는
|
|
101
|
+
* 정책이라, 폼에서 입력한 주소를 시나리오 입력으로 흘리는 다리 역할.
|
|
102
|
+
*/
|
|
103
|
+
private upsertEnvVar;
|
|
104
|
+
/**
|
|
105
|
+
* 단일 시나리오 호출 + result unwrap + 실패 판정 — collectProjectExternalData 의
|
|
106
|
+
* loop 본체와 같은 로직을 1건짜리로 분리.
|
|
107
|
+
*/
|
|
108
|
+
private runSingleScenario;
|
|
109
|
+
/**
|
|
110
|
+
* 외부 시스템 3종 시나리오 순차 실행 + 시스템별 결과 수집.
|
|
111
|
+
*/
|
|
112
|
+
private runExternalDataScenariosWithResults;
|
|
113
|
+
/**
|
|
114
|
+
* 세움터 수집 — 완공/완공전 케이스를 **하나의 세움터 결과**로 통합.
|
|
115
|
+
*
|
|
116
|
+
* 완공 단지는 건축물대장(building-info)에, 완공 전(택지지구·정비사업 블록) 단지는
|
|
117
|
+
* 인허가에 연면적이 있다. 인허가는 **용도별로 소스가 갈린다**:
|
|
118
|
+
* - 주택(공동주택) → 주택인허가(housing-permit, 사업계획승인)
|
|
119
|
+
* - 비주택(복합·노유자·근생·업무 등) → 건축인허가(building-permit block, 건축허가)
|
|
120
|
+
* 주소 하나로 세 소스를 순차 시도 — **대장 → 주택인허가 → 건축인허가**. 각 블록 소스는
|
|
121
|
+
* nameFilter(사업명)가 실제로 매칭될 때만 값을 내고, 매칭 없으면 빈 결과로 통과하므로
|
|
122
|
+
* (태스크 레벨에서 미매칭=빈결과 보장) **순서와 무관하게 잘못된 소스를 집지 않는다**.
|
|
123
|
+
* 저장된 용도 필드는 신뢰불가(예: 노유자 복합시설도 building_usage=RESIDENTIAL)라
|
|
124
|
+
* 사전 라우팅 대신 이 nameFilter 기반 사슬을 쓴다. 출력 필드가 세 소스 동일
|
|
125
|
+
* (totArea→area 등)이라 downstream 매핑·클로버 방지는 그대로 동작.
|
|
126
|
+
*
|
|
127
|
+
* 주소 소스: `address` 인자(정보연동 버튼) 우선, 없으면 도메인 canonical EnvVar
|
|
128
|
+
* (`Step::건축물관리대장조회::address::query`). 각 시나리오가 자기 EnvVar 를 참조하므로
|
|
129
|
+
* canonical 주소를 세 키에 동기화한 뒤 실행 — **프로젝트당 주소 1개** 유지.
|
|
130
|
+
* (블록형 프로젝트는 canonical 에 `…블럭 (단지명)` 을 넣으면 juso 가 자동 분기.)
|
|
131
|
+
*/
|
|
132
|
+
private collectSaeumteo;
|
|
133
|
+
/** 시나리오 result 에 유효한 연면적(area>0)이 있는지. 완공/완공전 채택 판정용. */
|
|
134
|
+
private hasArea;
|
|
135
|
+
/** 컨텍스트 도메인의 EnvVar 값 읽기 (없으면 undefined). */
|
|
136
|
+
private readEnvVar;
|
|
137
|
+
/**
|
|
138
|
+
* finalize 흐름용 시나리오 호출. 결과 형태 없이 진행만 — finalize 의 KPI 재계산이 곧
|
|
139
|
+
* 이어지므로 시스템별 결과를 클라이언트에 돌려줄 필요 없음. 실패는 warning 만.
|
|
140
|
+
*/
|
|
141
|
+
private runExternalDataScenarios;
|
|
142
|
+
/**
|
|
143
|
+
* 프로젝트의 모든 KPI Value들을 계층적으로 재계산합니다.
|
|
144
|
+
* 1. 기존 KPI Value 삭제 (중복 방지)
|
|
145
|
+
* 2. Leaf KPIs (자식이 없는 KPI): formula 기반 계산
|
|
146
|
+
* 3. Parent KPIs (자식이 있는 KPI): 자식 KPI scores의 weighted average 계산
|
|
147
|
+
*/
|
|
148
|
+
private recalculateProjectKpiValues;
|
|
149
|
+
/**
|
|
150
|
+
* 개별 KPI Value를 재계산합니다.
|
|
151
|
+
* 항상 최신 버전의 KPI를 사용하여 계산합니다.
|
|
152
|
+
*/
|
|
153
|
+
private recalculateKpiValue;
|
|
154
|
+
/**
|
|
155
|
+
* scoreFormula를 사용한 성과 점수 계산
|
|
156
|
+
*/
|
|
157
|
+
private calculateScoreFromFormula;
|
|
158
|
+
/**
|
|
159
|
+
* KPI의 grades lookup table을 이용한 성과 점수 변환
|
|
160
|
+
* 1D (기존 배열) 및 2D (X13 공정률×편차) lookup 모두 지원
|
|
161
|
+
*/
|
|
162
|
+
private calculateScoreFromLookup;
|
|
163
|
+
/**
|
|
164
|
+
* 2D lookup table에서 점수 계산 (X13: 공정률 × 편차 → 점수 1~5)
|
|
165
|
+
*
|
|
166
|
+
* 단위 정합:
|
|
167
|
+
* - deviationValue (= KpiMetric '일정 이탈 수준' value): % 단위 (예: 2.5 = 2.5%).
|
|
168
|
+
* - row.boundary*: ratio 단위 (예: 0.025 = 2.5%).
|
|
169
|
+
* - 비교 전 deviationValue 를 /100 해서 ratio 로 변환.
|
|
170
|
+
*/
|
|
171
|
+
private calculateScoreFrom2DLookup;
|
|
172
|
+
/**
|
|
173
|
+
* KpiValue의 성과 점수 계산 및 저장
|
|
174
|
+
* @param context.progressRate X13 등 2D lookup KPI에 필요한 공정률 (0~100)
|
|
175
|
+
*/
|
|
176
|
+
private calculateAndSaveScore;
|
|
177
|
+
/**
|
|
178
|
+
* Leaf KPI Value를 formula로 계산합니다.
|
|
179
|
+
* 참고: recalculateProjectKpiValues에서 호출 시 기존 값이 이미 삭제되었으므로 항상 새로 생성됩니다.
|
|
180
|
+
*/
|
|
181
|
+
private recalculateLeafKpiValue;
|
|
182
|
+
/**
|
|
183
|
+
* Parent KPI Value를 계산합니다.
|
|
184
|
+
* 1. formula가 있으면 자식 KPI 값들을 변수로 사용하여 formula 계산
|
|
185
|
+
* 2. formula가 없으면 자식 KPI scores의 weighted average로 계산
|
|
186
|
+
* 참고: recalculateProjectKpiValues에서 호출 시 기존 값이 이미 삭제되었으므로 항상 새로 생성됩니다.
|
|
187
|
+
*/
|
|
188
|
+
private recalculateParentKpiValue;
|
|
189
|
+
/**
|
|
190
|
+
* KPIs를 계층 레벨순으로 정렬합니다 (깊은 레벨부터)
|
|
191
|
+
*/
|
|
192
|
+
private sortKpisByLevel;
|
|
193
|
+
/**
|
|
194
|
+
* 자식 KPI values의 weighted average를 계산합니다.
|
|
195
|
+
*/
|
|
196
|
+
private calculateWeightedAverage;
|
|
197
|
+
}
|
|
198
|
+
export {};
|