@dssp/dkpi 1.0.29 → 1.0.32

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.
@@ -124,7 +124,7 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
124
124
  };
125
125
  }
126
126
  render() {
127
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
127
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10;
128
128
  return html `
129
129
  <dkpi-project-update-header
130
130
  .projectId=${this.project.id || ''}
@@ -211,6 +211,36 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
211
211
  </span>
212
212
  </div>
213
213
 
214
+ <div row>
215
+ <span>지상 층수</span>
216
+ <span align-end>
217
+ <md-outlined-text-field
218
+ type="text"
219
+ name="upperFloorCount"
220
+ numeric
221
+ building-complex
222
+ .value=${((_l = (_k = (_j = this.project) === null || _j === void 0 ? void 0 : _j.buildingComplex) === null || _k === void 0 ? void 0 : _k.upperFloorCount) === null || _l === void 0 ? void 0 : _l.toString()) || ''}
223
+ @input=${this._onInputChange}
224
+ suffix-text="층"
225
+ ></md-outlined-text-field>
226
+ </span>
227
+ </div>
228
+
229
+ <div row>
230
+ <span>지하 층수</span>
231
+ <span align-end>
232
+ <md-outlined-text-field
233
+ type="text"
234
+ name="lowerFloorCount"
235
+ numeric
236
+ building-complex
237
+ .value=${((_p = (_o = (_m = this.project) === null || _m === void 0 ? void 0 : _m.buildingComplex) === null || _o === void 0 ? void 0 : _o.lowerFloorCount) === null || _p === void 0 ? void 0 : _p.toString()) || ''}
238
+ @input=${this._onInputChange}
239
+ suffix-text="층"
240
+ ></md-outlined-text-field>
241
+ </span>
242
+ </div>
243
+
214
244
  <div row>
215
245
  <span>착공일정 ~ 준공일정(계획)</span>
216
246
  <span
@@ -234,6 +264,33 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
234
264
  </span>
235
265
  </div>
236
266
 
267
+ <!--
268
+ 실제 일정은 계획 일정 바로 아래. KPI 공기성과가 이 둘의 차이로 매겨지므로
269
+ 나란히 보여야 입력자가 어느 쪽을 적는지 헷갈리지 않는다.
270
+ -->
271
+ <div row>
272
+ <span>착공일 ~ 준공일(실제)</span>
273
+ <span
274
+ ><input
275
+ type="date"
276
+ name="actualStartDate"
277
+ project
278
+ .value=${this.project.actualStartDate || ''}
279
+ @input=${this._onInputChange}
280
+ max="9999-12-31"
281
+ />
282
+ ~
283
+ <input
284
+ type="date"
285
+ name="actualEndDate"
286
+ project
287
+ .value=${this.project.actualEndDate || ''}
288
+ @input=${this._onInputChange}
289
+ max="9999-12-31"
290
+ />
291
+ </span>
292
+ </div>
293
+
237
294
  <div row>
238
295
  <span>유형</span>
239
296
  <span
@@ -310,7 +367,7 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
310
367
  type="text"
311
368
  name="clientCompany"
312
369
  building-complex
313
- .value=${((_k = (_j = this.project) === null || _j === void 0 ? void 0 : _j.buildingComplex) === null || _k === void 0 ? void 0 : _k.clientCompany) || ''}
370
+ .value=${((_r = (_q = this.project) === null || _q === void 0 ? void 0 : _q.buildingComplex) === null || _r === void 0 ? void 0 : _r.clientCompany) || ''}
314
371
  @input=${this._onInputChange}
315
372
  ></md-outlined-text-field>
316
373
  </span>
@@ -322,7 +379,7 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
322
379
  type="text"
323
380
  name="constructionCompany"
324
381
  building-complex
325
- .value=${((_m = (_l = this.project) === null || _l === void 0 ? void 0 : _l.buildingComplex) === null || _m === void 0 ? void 0 : _m.constructionCompany) || ''}
382
+ .value=${((_t = (_s = this.project) === null || _s === void 0 ? void 0 : _s.buildingComplex) === null || _t === void 0 ? void 0 : _t.constructionCompany) || ''}
326
383
  @input=${this._onInputChange}
327
384
  ></md-outlined-text-field>
328
385
  </span>
@@ -334,7 +391,7 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
334
391
  type="text"
335
392
  name="designCompany"
336
393
  building-complex
337
- .value=${((_p = (_o = this.project) === null || _o === void 0 ? void 0 : _o.buildingComplex) === null || _p === void 0 ? void 0 : _p.designCompany) || ''}
394
+ .value=${((_v = (_u = this.project) === null || _u === void 0 ? void 0 : _u.buildingComplex) === null || _v === void 0 ? void 0 : _v.designCompany) || ''}
338
395
  @input=${this._onInputChange}
339
396
  ></md-outlined-text-field>
340
397
  </span>
@@ -346,7 +403,7 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
346
403
  type="text"
347
404
  name="supervisoryCompany"
348
405
  building-complex
349
- .value=${((_r = (_q = this.project) === null || _q === void 0 ? void 0 : _q.buildingComplex) === null || _r === void 0 ? void 0 : _r.supervisoryCompany) || ''}
406
+ .value=${((_x = (_w = this.project) === null || _w === void 0 ? void 0 : _w.buildingComplex) === null || _x === void 0 ? void 0 : _x.supervisoryCompany) || ''}
350
407
  @input=${this._onInputChange}
351
408
  ></md-outlined-text-field>
352
409
  </span>
@@ -357,7 +414,7 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
357
414
  <span>
358
415
  <ox-input-image
359
416
  name="mainPhoto"
360
- value=${((_t = (_s = this.project) === null || _s === void 0 ? void 0 : _s.mainPhoto) === null || _t === void 0 ? void 0 : _t.fullpath) || ''}
417
+ value=${((_z = (_y = this.project) === null || _y === void 0 ? void 0 : _y.mainPhoto) === null || _z === void 0 ? void 0 : _z.fullpath) || ''}
361
418
  @change=${this.onCreateAttachment.bind(this)}
362
419
  ></ox-input-image>
363
420
  </span>
@@ -370,7 +427,22 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
370
427
  name="constructionCost"
371
428
  numeric
372
429
  building-complex
373
- .value=${((_w = (_v = (_u = this.project) === null || _u === void 0 ? void 0 : _u.buildingComplex) === null || _v === void 0 ? void 0 : _v.constructionCost) === null || _w === void 0 ? void 0 : _w.toString()) || ''}
430
+ .value=${((_2 = (_1 = (_0 = this.project) === null || _0 === void 0 ? void 0 : _0.buildingComplex) === null || _1 === void 0 ? void 0 : _1.constructionCost) === null || _2 === void 0 ? void 0 : _2.toString()) || ''}
431
+ @input=${this._onInputChange}
432
+ suffix-text="억원"
433
+ ></md-outlined-text-field>
434
+ </span>
435
+ </div>
436
+
437
+ <div row>
438
+ <span>실제공사비</span>
439
+ <span
440
+ ><md-outlined-text-field
441
+ type="text"
442
+ name="actualConstructionCost"
443
+ numeric
444
+ project
445
+ .value=${((_3 = this.project.actualConstructionCost) === null || _3 === void 0 ? void 0 : _3.toString()) || ''}
374
446
  @input=${this._onInputChange}
375
447
  suffix-text="억원"
376
448
  ></md-outlined-text-field>
@@ -384,12 +456,73 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
384
456
  name="workerCount"
385
457
  numeric
386
458
  building-complex
387
- .value=${((_z = (_y = (_x = this.project) === null || _x === void 0 ? void 0 : _x.buildingComplex) === null || _y === void 0 ? void 0 : _y.workerCount) === null || _z === void 0 ? void 0 : _z.toString()) || ''}
459
+ .value=${((_6 = (_5 = (_4 = this.project) === null || _4 === void 0 ? void 0 : _4.buildingComplex) === null || _5 === void 0 ? void 0 : _5.workerCount) === null || _6 === void 0 ? void 0 : _6.toString()) || ''}
388
460
  @input=${this._onInputChange}
389
461
  suffix-text="(M/M)"
390
462
  ></md-outlined-text-field>
391
463
  </span>
392
464
  </div>
465
+
466
+ <!--
467
+ 준공 시점에 확정되는 실적 — 재해율·재해강도율·품질검측 건수.
468
+ 재해율은 %로 받는다 (재해자수/상시근로자수×100). KPI 가 쓰는 비율 단위로는
469
+ 수집할 때 서버가 나눈다 — 입력하는 사람이 단위를 환산하지 않도록.
470
+ -->
471
+ <div row>
472
+ <span>재해율</span>
473
+ <span
474
+ ><md-outlined-text-field
475
+ type="text"
476
+ name="accidentRate"
477
+ numeric
478
+ project
479
+ .value=${((_7 = this.project.accidentRate) === null || _7 === void 0 ? void 0 : _7.toString()) || ''}
480
+ @input=${this._onInputChange}
481
+ suffix-text="%"
482
+ ></md-outlined-text-field>
483
+ </span>
484
+ </div>
485
+ <div row>
486
+ <span>재해강도율</span>
487
+ <span
488
+ ><md-outlined-text-field
489
+ type="text"
490
+ name="accidentSeverityRate"
491
+ numeric
492
+ project
493
+ .value=${((_8 = this.project.accidentSeverityRate) === null || _8 === void 0 ? void 0 : _8.toString()) || ''}
494
+ @input=${this._onInputChange}
495
+ ></md-outlined-text-field>
496
+ </span>
497
+ </div>
498
+ <div row>
499
+ <span>품질검측 건수</span>
500
+ <span
501
+ ><md-outlined-text-field
502
+ type="text"
503
+ name="inspectionCount"
504
+ numeric
505
+ project
506
+ .value=${((_9 = this.project.inspectionCount) === null || _9 === void 0 ? void 0 : _9.toString()) || ''}
507
+ @input=${this._onInputChange}
508
+ suffix-text="건"
509
+ ></md-outlined-text-field>
510
+ </span>
511
+ </div>
512
+ <div row>
513
+ <span>품질검측 불합격 건수</span>
514
+ <span
515
+ ><md-outlined-text-field
516
+ type="text"
517
+ name="inspectionFailCount"
518
+ numeric
519
+ project
520
+ .value=${((_10 = this.project.inspectionFailCount) === null || _10 === void 0 ? void 0 : _10.toString()) || ''}
521
+ @input=${this._onInputChange}
522
+ suffix-text="건"
523
+ ></md-outlined-text-field>
524
+ </span>
525
+ </div>
393
526
  </div>
394
527
 
395
528
  <div detail-info>
@@ -506,6 +639,13 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
506
639
  geoGroup
507
640
  startDate
508
641
  endDate
642
+ actualStartDate
643
+ actualEndDate
644
+ actualConstructionCost
645
+ accidentRate
646
+ accidentSeverityRate
647
+ inspectionCount
648
+ inspectionFailCount
509
649
  mainPhoto {
510
650
  fullpath
511
651
  }
@@ -525,6 +665,8 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
525
665
  area
526
666
  coverageRatio
527
667
  floorAreaRatio
668
+ upperFloorCount
669
+ lowerFloorCount
528
670
  structureType
529
671
  workerCount
530
672
  designChangeCount
@@ -673,9 +815,8 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
673
815
  * · siteType (한글) → SiteType enum 변환 (BC.siteType, enum 컬럼)
674
816
  * · siteType (한글) → BC.constructionType 그대로 (자유 텍스트 컬럼)
675
817
  * · area / floorAreaRatio / coverageRatio / householdCount / buildingCount /
676
- * structureType → BC 동명 컬럼에 직접 대입
677
- * · upperFloorCount / lowerFloorCount / bldNm / useAprDay / pmsDay → BC 컬럼
678
- * 없음, 매핑 skip (참고용 콘솔 로그만)
818
+ * upperFloorCount / lowerFloorCount / structureType → BC 동명 컬럼에 직접 대입
819
+ * · bldNm / useAprDay / pmsDay → BC 컬럼 없음, 매핑 skip (참고용 콘솔 로그만)
679
820
  */
680
821
  async _collectBasicInfo() {
681
822
  var _a, _b, _c, _d;
@@ -765,6 +906,9 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
765
906
  setBC('coverageRatio', this._toNum(data.coverageRatio));
766
907
  setBC('householdCount', this._toNum(data.householdCount));
767
908
  setBC('buildingCount', this._toNum(data.buildingCount));
909
+ // 층수 — 건축물대장이 단지 단위로 내려 준다. 담을 컬럼이 생겨 이제 폼에 반영한다.
910
+ setBC('upperFloorCount', this._toNum(data.upperFloorCount));
911
+ setBC('lowerFloorCount', this._toNum(data.lowerFloorCount));
768
912
  setBC('structureType', data.structureType);
769
913
  // siteType: 한글 → SiteType enum 매핑. 매핑 안 되면 BC.siteType 빈 채로.
770
914
  if (data.siteType) {
@@ -781,12 +925,7 @@ let SvProjectUpdate = class SvProjectUpdate extends ScopedElementsMixin(PageView
781
925
  project.endDate = data.endDate;
782
926
  this.project = project;
783
927
  // 참고 메타 — BC/Project 직접 컬럼 없음, 콘솔로만 (permitDate=건축허가일, bldNm 등)
784
- console.log('[정보 연동] meta:', JSON.stringify({
785
- upperFloorCount: data.upperFloorCount,
786
- lowerFloorCount: data.lowerFloorCount,
787
- bldNm: data.bldNm,
788
- permitDate: data.permitDate
789
- }));
928
+ console.log('[정보 연동] meta:', JSON.stringify({ bldNm: data.bldNm, permitDate: data.permitDate }));
790
929
  }
791
930
  _toNum(v) {
792
931
  if (v === null || v === undefined || v === '')