Skip to main content

컬럼 정의 — 고급

기본 컬럼 문법은 컬럼 정의 (기본)을 참조하세요.

FK 참조 (fkRef)

{
"name": "item_id",
"displayName": "품목",
"type": "UUID",
"constraints": ["FK", "NOT_NULL"],
"fkRef": {
"targetTableRef": "hcm_items",
"displayColumn": "item_name"
}
}
필드타입설명
targetTableRefstring참조 대상 테이블의 refId
displayColumnstring대상 테이블에서 실제 존재하는 표시 컬럼명

FK 규칙 (중요!)

  1. targetTableRef같은 JSON 파일 내 테이블의 refId만 참조 가능
  2. displayColumn은 대상 테이블의 columns실제 존재하는 name 이어야 함
  3. 기존 솔루션 테이블(541개) 참조 금지 — 고객 접두사 내에서만 참조
  4. type은 반드시 "UUID"
  5. 자기 참조(self-reference)도 가능 (예: hcm_item_categorieshcm_item_categories)

SYSTEM_REF (시스템 테이블 참조)

{
"name": "manager_id",
"displayName": "담당자",
"type": "UUID",
"constraints": ["SYSTEM_REF"],
"systemRef": "users"
}
systemRef 값대상설명
"users"시스템 사용자 테이블담당자, 작성자, 승인자 등
"departments"시스템 부서 테이블소속부서, 관리부서 등
  • 이 두 테이블만 SYSTEM_REF로 참조 가능
  • FK와 달리 fkRef 불필요 — systemRef만 지정

FILE 타입

{
"name": "drawing_file",
"displayName": "도면",
"type": "FILE",
"constraints": [],
"fileMeta": {
"uploadEnabled": true,
"allowedCategories": ["image", "document"],
"maxFileSize": 10,
"maxFiles": 5,
"previewEnabled": true,
"versioningEnabled": false
}
}
fileMeta 필드타입설명
uploadEnabledboolean업로드 허용 여부
allowedCategoriesstring[]허용 파일 유형: image, document, excel, archive, general
maxFileSizenumber최대 파일 크기 (MB)
maxFilesnumber최대 파일 수
previewEnabledboolean미리보기 허용
versioningEnabledboolean파일 버전 관리

자동 계산 컬럼 (isComputed + computedConfig)

isComputed: true인 컬럼은 DTO에서 제외되고, 런타임에서 읽기 전용으로 렌더링됩니다.

computedConfig 타입별 정의

1. formula (동일 레코드 필드 연산)

{
"name": "total_amount",
"displayName": "총액",
"type": "DECIMAL",
"constraints": [],
"defaultValue": "0",
"isComputed": true,
"computedConfig": {
"type": "formula",
"expression": "quantity * unit_price",
"dependsOn": ["quantity", "unit_price"]
},
"description": "수량 × 단가 자동 계산"
}
computedConfig 필드타입설명
type"formula"동일 레코드 내 필드 간 수식
expressionstringJavaScript 수식 (+, -, *, / 사용)
dependsOnstring[]수식에 사용되는 컬럼명 배열 (실시간 재계산용)

2. aggregation (자식 테이블 집계)

{
"name": "completion_rate",
"displayName": "완성률",
"type": "DECIMAL",
"constraints": [],
"defaultValue": "0",
"isComputed": true,
"computedConfig": {
"type": "aggregation",
"sourceTable": "work_orders",
"sourceColumn": "good_qty",
"function": "SUM",
"fkColumn": "production_order_id",
"expression": "SUM(good_qty) / order_qty * 100"
},
"description": "하위 작업지시 양품합계 ÷ 지시수량 × 100"
}
computedConfig 필드타입설명
type"aggregation"자식 테이블 집계
sourceTablestring집계 대상 자식 테이블 refId
sourceColumnstring집계 대상 컬럼명
functionstring집계 함수: "SUM", "AVG", "COUNT", "MAX", "MIN"
fkColumnstring자식 테이블에서 부모를 참조하는 FK 컬럼
expressionstring선택 — 집계 후 추가 연산 수식

3. reference (다른 테이블 참조 조회)

{
"name": "customer_name",
"displayName": "고객명",
"type": "VARCHAR",
"constraints": [],
"isComputed": true,
"computedConfig": {
"type": "reference",
"sourceTable": "partners",
"sourceColumn": "partner_name",
"fkColumn": "partner_id"
},
"description": "거래처 테이블에서 조회"
}
computedConfig 필드타입설명
type"reference"다른 테이블 값 조회
sourceTablestring참조 대상 테이블 refId
sourceColumnstring참조 대상 컬럼명
fkColumnstring현재 테이블의 FK 컬럼

isComputed 규칙

  1. isComputed: true 컬럼은 Create/Update DTO에서 자동 제외
  2. 런타임 폼에서 읽기 전용 + fx 배지 표시
  3. 런타임 리스트에서 인라인 편집 비활성 + fx 텍스트 배지
  4. computedConfig.type에 따라 계산 시점이 다름:
    • formula: 폼 입력 실시간 + 서버 CREATE/UPDATE 시
    • aggregation: 자식 레코드 변경 시 (CascadeUpdateService 또는 서버 재집계)
    • reference: 서버 조회 시
  5. NaN/Infinity 방지를 위해 서버에서 validateComputedValue() 적용
  6. 시드 데이터에 반드시 계산 결과와 일치하는 값 제공 필요

자동 채번 컬럼 (supportsAutoNumbering)

{
"name": "wo_number",
"displayName": "작업지시번호",
"type": "VARCHAR",
"constraints": ["NOT_NULL", "UNIQUE"],
"supportsAutoNumbering": true,
"autoNumberingPrefix": "WO",
"description": "WO-{YYYY}{MM}-{SEQ:4} 패턴 자동 생성"
}
필드타입필수설명
supportsAutoNumberingbooleantrue로 설정 시 자동 채번 활성화
autoNumberingPrefixstring선택채번 접두어 (예: "PO", "SO", "WO")

접두어 네이밍 규칙 가이드

autoNumberingPrefix를 정의할 때 다음 규칙을 따릅니다.

규칙설명예시
2~4자 영문 대문자접두어 길이는 2~4자로 제한PO, WO, CAPA
업계 표준 약어 우선국제적으로 통용되는 약어 사용PO = Purchase Order, SO = Sales Order
도메인 내 중복 금지같은 솔루션(도메인) 안에서 접두어 중복 불가ERP 내 PO가 있으면 다른 테이블에 PO 재사용 금지
필수 지정 권장솔루션 정의 시 autoNumberingPrefix 명시 권장미지정 시 빈 문자열로 생성되어 런타임에서 별도 설정 필요
  • 접두어는 테이블별 문서번호의 식별자 역할 (예: PO = Purchase Order, SO = Sales Order)
  • 캔버스 노드의 컬럼 설정에서 직접 입력 가능
  • 접두어를 지정하면 배포 시 기본 채번 규칙이 자동 생성
  • 미지정 시 빈 문자열로 생성 (런타임에서 수정 가능)

배포 시 자동 생성되는 기본 규칙

배포 시 autoNumberingPrefix 값을 기반으로 auto_numbering_rules 레코드가 자동 생성됩니다. 기본 생성 패턴은 {PREFIX}-{YYYY}{MM}-{SEQ:4}입니다.

항목기본값설명
prefixautoNumberingPrefix접두어
date_format{YYYY}{MM}날짜 패턴 (년월)
separator-구분자
sequence_length4시퀀스 자릿수 (0001~9999)
reset_periodmonthly월별 시퀀스 리셋
timezoneAsia/Seoul타임존
is_activetrue기본 활성 상태

생성 예시:

  • autoNumberingPrefix: "SO"SO-202603-0001, SO-202603-0002, ...
  • autoNumberingPrefix: "PO"PO-202603-0001, PO-202603-0002, ...
  • autoNumberingPrefix: "WO"WO-202603-0001, WO-202603-0002, ...
런타임 상세 설정

배포 후 런타임의 자동 채번 다이얼로그에서 다음 항목을 미세조정할 수 있습니다:

  • 접두어, 날짜 패턴, 구분자, 시퀀스 자릿수, 접미어
  • 리셋 주기 (일별/월별/연별)
  • 수동 입력 허용 여부
  • 오버플로우 정책 (시퀀스 초과 시 처리 방식)

supportsAutoNumbering 규칙

  1. supportsAutoNumbering: true 컬럼은 런타임 폼에서 읽기 전용 + 잠금 아이콘 표시
  2. 런타임 리스트에서 인라인 편집 비활성 + 잠금 아이콘
  3. 배포 시 자동 규칙 생성: autoNumberingPrefix 기반으로 auto_numbering_rules 레코드 자동 INSERT (ON CONFLICT 무시로 재배포 안전)
  4. 채번 패턴은 auto_numbering_rules 테이블에 테넌트별 DB 저장 → 세션 간 유지
  5. 패턴 구성요소: {PREFIX}, {YYYY}, {MM}, {DD}, {SEQ:N} (N자리 시퀀스)
  6. 시퀀스는 타임존 인식 리셋 (일별/월별) + 오버플로우 처리
  7. Create DTO에서 제외되지 않으나, 빈 값이면 서버가 자동 생성
  8. 런타임의 자동 채번 다이얼로그에서 접두어, 날짜 패턴, 시퀀스 자릿수 등 상세 커스터마이즈 가능

자동채번 설정 흐름

프리셋 정의부터 런타임까지의 자동채번 설정 흐름은 다음과 같습니다.

솔루션/프리셋 정의 (autoNumberingPrefix)

캔버스 적용 (solutionSlice에서 복사)

캔버스에서 접두어 확인/수정 가능

배포 (deployment-saga에서 auto_numbering_rules 생성)

런타임에서 상세 설정 미세조정 가능

도메인별 표준 접두어 참조

솔루션 정의 시 참조할 수 있는 도메인별 표준 접두어 목록입니다.

ERP 기본

접두어용도예시
PO생산오더 (Production Order)PO-202603-0001
PR구매요청 (Purchase Requisition)PR-202603-0001
SO주문/수주 (Sales Order)SO-202603-0001
GR입고 (Goods Receipt)GR-202603-0001
SH출하 (Shipment)SH-202603-0001
QT견적 (Quotation)QT-202603-0001
CT계약 (Contract)CT-202603-0001
GL전표 (General Ledger)GL-202603-0001
AR채권 (Accounts Receivable)AR-202603-0001
AP채무 (Accounts Payable)AP-202603-0001
TI세금계산서 (Tax Invoice)TI-202603-0001
ECO설계변경 (Engineering Change Order)ECO-202603-0001
NCR부적합 (Non-Conformance Report)NCR-202603-0001

MES

접두어용도예시
WO작업지시 (Work Order)WO-202603-0001
LOTLOT번호LOT-202603-0001
QI검사 (Quality Inspection)QI-202603-0001

SCM/WMS

접두어용도예시
RFQ견적요청 (Request for Quotation)RFQ-202603-0001
IPO수입발주 (Import Purchase Order)IPO-202603-0001
LC신용장 (Letter of Credit)LC-202603-0001
WI입고 (Warehouse Inbound)WI-202603-0001
WBO출고 (Warehouse Outbound)WBO-202603-0001
PK피킹 (Picking)PK-202603-0001
ADJ조정 (Adjustment)ADJ-202603-0001

QMS

접두어용도예시
CAPA시정조치 (Corrective & Preventive Action)CAPA-202603-0001
PPAP양산승인 (Production Part Approval)PPAP-202603-0001
DEV일탈 (Deviation)DEV-202603-0001

LookupColumnDef 확장 (소스 문서 패널 컬럼)

sourceDocumentConfigdisplayColumns에서 사용하는 확장된 컬럼 정의입니다. 기본 표시 외에 모바일 카드 렌더링과 가상 계산 컬럼을 지원합니다.

LookupColumnDef 인터페이스

interface LookupColumnDef {
columnName: string; // 표시할 컬럼명
label: string; // 한글 라벨
width: number; // 컬럼 너비 (px)
render?: 'number' | 'date' | 'badge' | 'link';
cardRole?: 'title' | 'subtitle' | 'quantity' | 'status'; // 카드 역할
computed?: { // 가상 계산 컬럼
expression: string;
label: string;
};
}

필드 명세

필드타입필수설명
columnNamestring필수소스 테이블의 컬럼명
labelstring필수패널에 표시할 한글 라벨
widthnumber필수테이블 모드에서의 컬럼 너비 (px)
renderstring선택렌더러 타입: number, date, badge, link
cardRolestring선택모바일 카드 모드에서의 역할
computedobject선택가상 계산 컬럼 정의 (DB에 없는 계산값)

cardRole (모바일 카드 역할)

SourceDocumentPanel을 모바일(카드 뷰)로 렌더링할 때, 각 컬럼이 카드의 어느 위치에 표시될지 결정합니다.

cardRole카드 위치설명
title카드 제목굵은 글씨, 상단 표시
subtitle카드 부제제목 아래 작은 글씨
quantity수량 영역오른쪽 정렬, 숫자 강조
status상태 배지색상 배지로 표시
{
"displayColumns": [
{ "columnName": "order_number", "label": "수주번호", "width": 120, "cardRole": "title" },
{ "columnName": "item_name", "label": "품목명", "width": 150, "cardRole": "subtitle" },
{ "columnName": "quantity", "label": "주문수량", "width": 80, "render": "number", "cardRole": "quantity" },
{ "columnName": "status", "label": "상태", "width": 80, "render": "badge", "cardRole": "status" }
]
}

computed (가상 계산 컬럼)

DB에 존재하지 않는 가상 컬럼을 패널에서 계산하여 표시합니다. 주로 잔량(미출하수량, 미입고수량)을 표시할 때 사용합니다.

{
"displayColumns": [
{ "columnName": "quantity", "label": "주문수량", "width": 80, "render": "number" },
{ "columnName": "shipped_qty", "label": "출하수량", "width": 80, "render": "number" },
{
"columnName": "_remaining",
"label": "미출하수량",
"width": 80,
"render": "number",
"cardRole": "quantity",
"computed": {
"expression": "quantity - shipped_qty",
"label": "미출하"
}
}
]
}

computed 규칙

  1. expression에 사용되는 컬럼은 같은 displayColumns 또는 소스 테이블에 존재해야 함
  2. columnName_로 시작하는 가상 이름 사용 권장 (예: _remaining, _balance)
  3. 계산 결과는 클라이언트 사이드에서 실시간 연산 — 서버 집계와 별개
  4. 음수 결과 방지를 위해 Math.max(0, result) 처리 적용

이전: 컬럼 정의 (기본) | 다음: 관계 정의