Merge branch 'iipbs/st/dev'

This commit is contained in:
2026-06-04 11:12:08 +09:00
2 changed files with 127 additions and 26 deletions
@@ -4,8 +4,6 @@ import { useEffect, useState } from "react";
import { Controller, useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { Search } from "lucide-react";
import { Tooltip, TooltipContent, TooltipTrigger } from "@common/components";
import { CodeSelect } from "@/entities/code/ui/code-select";
import { verificationTargetManagementApi } from "@/entities/statistics/api/verification-target-management-service";
@@ -17,6 +15,14 @@ import {
type VerificationTargetManagementFormData,
verificationTargetManagementSchema,
} from "@/entities/statistics/model/verification-target-management-schema";
import {
Label,
RadioGroup,
RadioGroupItem,
Tooltip,
TooltipContent,
TooltipTrigger,
} from "@common/components";
import {
Button,
Dialog,
@@ -321,16 +327,27 @@ export function VerificationTargetDialog({
{tabValue !== "IMR" && (
<TableRow>
<TableHead className="bg-muted font-medium">
<Tooltip>
<TooltipTrigger asChild>
<span className="inline-flex cursor-help items-center gap-1">
중요도 계수(μ)
<i className="diveicon di-info-circle text-muted-foreground" />
</span>
<span className="inline-flex cursor-help items-center gap-1">
중요도 계수(μ)
<i className="diveicon di-info-circle text-muted-foreground" />
</span>
</TooltipTrigger>
<TooltipContent>
<p>통계청(Statistics Canada) 등에서 기업 단위의 주기적 조사 데이터(수익, 매출, 생산량 등)에서 이상치(Outlier)를 탐지할 때, 데이터의 크기(규모)에 따라 이상치 판별 기준을 다르게 적용하기 위해 도입된 가중치 요인</p>
<p>
통계청(Statistics
Canada) 등에서 기업
단위의 주기적 조사
데이터(수익, 매출,
생산량 등)에서
이상치(Outlier)를 탐지할
때, 데이터의
크기(규모)에 따라 이상치
판별 기준을 다르게
적용하기 위해 도입된
가중치 요인
</p>
</TooltipContent>
</Tooltip>
</TableHead>
@@ -370,13 +387,19 @@ export function VerificationTargetDialog({
<TableHead className="bg-muted font-medium">
<Tooltip>
<TooltipTrigger asChild>
<span className="inline-flex cursor-help items-center gap-1">
백분위수 기준값(pct)
<i className="diveicon di-info-circle text-muted-foreground" />
</span>
<span className="inline-flex cursor-help items-center gap-1">
백분위수 기준값(pct)
<i className="diveicon di-info-circle text-muted-foreground" />
</span>
</TooltipTrigger>
<TooltipContent>
<p>데이터가 정규분포를 따르지 않아도, 데이터의 하위/상위 몇 % 위치를 기준으로 이상치 범위를 정할지 결정</p>
<p>
데이터가 정규분포를
따르지 않아도, 데이터의
하위/상위 몇 % 위치를
기준으로 이상치 범위를
정할지 결정
</p>
</TooltipContent>
</Tooltip>
</TableHead>
@@ -419,16 +442,23 @@ export function VerificationTargetDialog({
{tabValue !== "IMR" && (
<TableRow>
<TableHead className="bg-muted font-medium">
<Tooltip>
<TooltipTrigger asChild>
<span className="inline-flex cursor-help items-center gap-1">
스케일 조정 계수(A)
<i className="diveicon di-info-circle text-muted-foreground" />
</span>
<span className="inline-flex cursor-help items-center gap-1">
스케일 조정 계수(A)
<i className="diveicon di-info-circle text-muted-foreground" />
</span>
</TooltipTrigger>
<TooltipContent>
<p>데이터의 크기가 다른 경우, 특히 규모가 작은 업체가 이상치로 잘못 탐지되는 것을 막기 위해 변환된 비율(Symmetric Ratios)에 규모(size)의 영향을 보정하는 역할</p>
<p>
데이터의 크기가 다른
경우, 특히 규모가 작은
업체가 이상치로 잘못
탐지되는 것을 막기 위해
변환된 비율(Symmetric
Ratios)에 규모(size)의
영향을 보정하는 역할
</p>
</TooltipContent>
</Tooltip>
</TableHead>
@@ -465,16 +495,22 @@ export function VerificationTargetDialog({
)}
/>
</TableCell>
<TableHead className="bg-muted font-medium" >
<TableHead className="bg-muted font-medium">
<Tooltip>
<TooltipTrigger asChild>
<span className="inline-flex cursor-help items-center gap-1">
임계 계수(c)
<i className="diveicon di-info-circle text-muted-foreground" />
</span>
<span className="inline-flex cursor-help items-center gap-1">
임계 계수(c)
<i className="diveicon di-info-circle text-muted-foreground" />
</span>
</TooltipTrigger>
<TooltipContent>
<p>데이터의 분포가 중앙값(median)을 중심으로 얼마나 흩어져 있는지를 바탕으로 이상치 범위를 결정</p>
<p>
데이터의 분포가
중앙값(median)을
중심으로 얼마나 흩어져
있는지를 바탕으로 이상치
범위를 결정
</p>
</TooltipContent>
</Tooltip>
</TableHead>
@@ -513,6 +549,48 @@ export function VerificationTargetDialog({
</TableCell>
</TableRow>
)}
<TableRow>
<TableHead className="bg-muted font-medium">
사용 여부
</TableHead>
<TableCell colSpan={3}>
<Controller
name="useYn"
control={control}
render={({ field }) => (
<div className="space-y-1">
<RadioGroup
className="flex items-center"
{...field}
onValueChange={
field.onChange
}
>
<div className="flex items-center gap-1">
<RadioGroupItem
value="Y"
id="useY"
/>
<Label htmlFor="useY">
예
</Label>
</div>
<div className="flex items-center gap-1">
<RadioGroupItem
value="N"
id="useN"
/>
<Label htmlFor="useN">
아니오
</Label>
</div>
</RadioGroup>
</div>
)}
/>
</TableCell>
</TableRow>
</TableBody>
</Table>
@@ -612,4 +690,3 @@ export function VerificationTargetDialog({
</>
);
}
@@ -67,6 +67,13 @@ export const hbArticleColumnInfo: ColumnInfo = {
valueType: ValueType.NUMBER,
dataFormat: "#,##0.###",
},
{
name: "useYn",
fieldName: "useYn",
header: { text: "사용 여부" },
editable: false,
sortdisable: false,
},
{
name: "rgtrNm",
fieldName: "rgtrNm",
@@ -91,6 +98,7 @@ export const hbArticleColumnInfo: ColumnInfo = {
"pctlCrtrVl",
"scopCntCntVl",
"thrsCntVl",
"useYn",
"rgtrNm",
"regDt",
],
@@ -126,6 +134,13 @@ export const imrArticleColumnInfo: ColumnInfo = {
editable: false,
sortdisable: false,
},
{
name: "useYn",
fieldName: "useYn",
header: { text: "사용 여부" },
editable: false,
sortdisable: false,
},
{
name: "rgtrNm",
fieldName: "rgtrNm",
@@ -146,6 +161,7 @@ export const imrArticleColumnInfo: ColumnInfo = {
"vrfcTrgtNm",
"tblNm",
"colNm",
"useYn",
"rgtrNm",
"regDt",
],
@@ -181,6 +197,13 @@ export const validationArticleColumnInfo: ColumnInfo = {
editable: false,
sortdisable: false,
},
{
name: "useYn",
fieldName: "useYn",
header: { text: "사용 여부" },
editable: false,
sortdisable: false,
},
{
name: "rgtrNm",
fieldName: "rgtrNm",
@@ -201,6 +224,7 @@ export const validationArticleColumnInfo: ColumnInfo = {
"vrfcTrgtNm",
"tblNm",
"colNm",
"useYn",
"rgtrNm",
"regDt",
],