181 lines
5.4 KiB
TypeScript
181 lines
5.4 KiB
TypeScript
/**
|
|
* 형질(Trait) 관련 상수 정의
|
|
*
|
|
* @description
|
|
* 유전체 분석에서 사용하는 35개 형질 목록
|
|
* 백엔드 TraitTypes.ts와 동기화 필요
|
|
*/
|
|
|
|
/** 성장형질 (1개) */
|
|
export const GROWTH_TRAITS = ['12개월령체중'] as const;
|
|
|
|
/** 경제형질 (4개) - 생산 카테고리 */
|
|
export const ECONOMIC_TRAITS = ['도체중', '등심단면적', '등지방두께', '근내지방도'] as const;
|
|
|
|
/** 체형형질 (10개) */
|
|
export const BODY_TRAITS = [
|
|
'체고', '십자', '체장', '흉심', '흉폭',
|
|
'고장', '요각폭', '좌골폭', '곤폭', '흉위',
|
|
] as const;
|
|
|
|
/** 부위별 무게 (10개) */
|
|
export const WEIGHT_TRAITS = [
|
|
'안심weight', '등심weight', '채끝weight', '목심weight', '앞다리weight',
|
|
'우둔weight', '설도weight', '사태weight', '양지weight', '갈비weight',
|
|
] as const;
|
|
|
|
/** 부위별 비율 (10개) */
|
|
export const RATE_TRAITS = [
|
|
'안심rate', '등심rate', '채끝rate', '목심rate', '앞다리rate',
|
|
'우둔rate', '설도rate', '사태rate', '양지rate', '갈비rate',
|
|
] as const;
|
|
|
|
/** 전체 형질 (35개) */
|
|
export const ALL_TRAITS = [
|
|
...GROWTH_TRAITS,
|
|
...ECONOMIC_TRAITS,
|
|
...BODY_TRAITS,
|
|
...WEIGHT_TRAITS,
|
|
...RATE_TRAITS,
|
|
] as const;
|
|
|
|
/** 낮을수록 좋은 형질 (부호 반전 필요) */
|
|
export const NEGATIVE_TRAITS: string[] = ['등지방두께'];
|
|
|
|
/** 기본 선택 형질 (7개) */
|
|
export const DEFAULT_TRAITS = ['도체중', '등심단면적', '등지방두께', '근내지방도', '체장', '체고', '등심weight'] as const;
|
|
|
|
/** 형질 타입 */
|
|
export type TraitName = typeof ALL_TRAITS[number];
|
|
|
|
/** 카테고리 타입 */
|
|
export type TraitCategory = '성장' | '생산' | '체형' | '무게' | '비율';
|
|
|
|
/**
|
|
* 카테고리별 형질 목록
|
|
*/
|
|
export const TRAIT_CATEGORIES: Record<TraitCategory, readonly string[]> = {
|
|
'성장': GROWTH_TRAITS,
|
|
'생산': ECONOMIC_TRAITS,
|
|
'체형': BODY_TRAITS,
|
|
'무게': WEIGHT_TRAITS,
|
|
'비율': RATE_TRAITS,
|
|
};
|
|
|
|
/**
|
|
* UI용 카테고리 정보 (id, name, traits)
|
|
*/
|
|
export const TRAIT_CATEGORY_LIST = [
|
|
{ id: 'growth', name: '성장형질', traits: [...GROWTH_TRAITS] },
|
|
{ id: 'economic', name: '경제형질', traits: [...ECONOMIC_TRAITS] },
|
|
{ id: 'body', name: '체형형질', traits: [...BODY_TRAITS] },
|
|
{ id: 'weight', name: '부위별무게', traits: [...WEIGHT_TRAITS] },
|
|
{ id: 'rate', name: '부위별비율', traits: [...RATE_TRAITS] },
|
|
] as const;
|
|
|
|
/**
|
|
* 형질별 카테고리 매핑
|
|
*/
|
|
export const TRAIT_CATEGORY_MAP: Record<string, TraitCategory> = {
|
|
// 성장
|
|
'12개월령체중': '성장',
|
|
// 생산
|
|
'도체중': '생산',
|
|
'등심단면적': '생산',
|
|
'등지방두께': '생산',
|
|
'근내지방도': '생산',
|
|
// 체형
|
|
'체고': '체형',
|
|
'십자': '체형',
|
|
'체장': '체형',
|
|
'흉심': '체형',
|
|
'흉폭': '체형',
|
|
'고장': '체형',
|
|
'요각폭': '체형',
|
|
'좌골폭': '체형',
|
|
'곤폭': '체형',
|
|
'흉위': '체형',
|
|
// 무게
|
|
'안심weight': '무게',
|
|
'등심weight': '무게',
|
|
'채끝weight': '무게',
|
|
'목심weight': '무게',
|
|
'앞다리weight': '무게',
|
|
'우둔weight': '무게',
|
|
'설도weight': '무게',
|
|
'사태weight': '무게',
|
|
'양지weight': '무게',
|
|
'갈비weight': '무게',
|
|
// 비율
|
|
'안심rate': '비율',
|
|
'등심rate': '비율',
|
|
'채끝rate': '비율',
|
|
'목심rate': '비율',
|
|
'앞다리rate': '비율',
|
|
'우둔rate': '비율',
|
|
'설도rate': '비율',
|
|
'사태rate': '비율',
|
|
'양지rate': '비율',
|
|
'갈비rate': '비율',
|
|
};
|
|
|
|
/**
|
|
* 형질 설명 (툴팁용)
|
|
*/
|
|
export const TRAIT_DESCRIPTIONS: Record<string, string> = {
|
|
// 성장형질
|
|
'12개월령체중': '12개월 시점 체중',
|
|
// 경제형질
|
|
'도체중': '도축 후 고기 무게',
|
|
'등심단면적': '등심의 단면 크기',
|
|
'등지방두께': '등 부위 지방 두께 (낮을수록 좋음)',
|
|
'근내지방도': '마블링 정도 (높을수록 고급육)',
|
|
// 체형형질
|
|
'체고': '어깨 높이',
|
|
'십자': '십자부(엉덩이) 높이',
|
|
'체장': '몸통 길이',
|
|
'흉심': '가슴 깊이',
|
|
'흉폭': '가슴 너비',
|
|
'고장': '엉덩이 길이',
|
|
'요각폭': '허리뼈 너비',
|
|
'좌골폭': '좌골 너비',
|
|
'곤폭': '좌골단 너비',
|
|
'흉위': '가슴둘레',
|
|
// 부위별 무게
|
|
'안심weight': '안심 부위 무게',
|
|
'등심weight': '등심 부위 무게',
|
|
'채끝weight': '채끝 부위 무게',
|
|
'목심weight': '목심 부위 무게',
|
|
'앞다리weight': '앞다리 부위 무게',
|
|
'우둔weight': '우둔 부위 무게',
|
|
'설도weight': '설도 부위 무게',
|
|
'사태weight': '사태 부위 무게',
|
|
'양지weight': '양지 부위 무게',
|
|
'갈비weight': '갈비 부위 무게',
|
|
// 부위별 비율
|
|
'안심rate': '전체 대비 안심 비율',
|
|
'등심rate': '전체 대비 등심 비율',
|
|
'채끝rate': '전체 대비 채끝 비율',
|
|
'목심rate': '전체 대비 목심 비율',
|
|
'앞다리rate': '전체 대비 앞다리 비율',
|
|
'우둔rate': '전체 대비 우둔 비율',
|
|
'설도rate': '전체 대비 설도 비율',
|
|
'사태rate': '전체 대비 사태 비율',
|
|
'양지rate': '전체 대비 양지 비율',
|
|
'갈비rate': '전체 대비 갈비 비율',
|
|
};
|
|
|
|
/**
|
|
* 형질명으로 카테고리 조회
|
|
*/
|
|
export function getTraitCategory(traitName: string): TraitCategory | '기타' {
|
|
return TRAIT_CATEGORY_MAP[traitName] ?? '기타';
|
|
}
|
|
|
|
/**
|
|
* 형질명으로 설명 조회
|
|
*/
|
|
export function getTraitDescription(traitName: string): string {
|
|
return TRAIT_DESCRIPTIONS[traitName] ?? traitName;
|
|
}
|