V13-FE-011: finalize search list layout slice
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": []
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": []
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": []
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": []
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": []
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": []
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": []
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,368 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,194 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"tokens": [
|
||||
{
|
||||
"path": "typography.fontFamily",
|
||||
"css": "--kbx-font-family",
|
||||
"type": "fontFamily",
|
||||
"role": "primitive",
|
||||
"value": "Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", Arial, sans-serif",
|
||||
"description": "업무 기본 Font Stack"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xs",
|
||||
"css": "--kbx-font-xs",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.sm",
|
||||
"css": "--kbx-font-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "13px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.md",
|
||||
"css": "--kbx-font-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "14px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.lg",
|
||||
"css": "--kbx-font-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xl",
|
||||
"css": "--kbx-font-xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "18px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.2xl",
|
||||
"css": "--kbx-font-2xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "color.white",
|
||||
"css": "--kbx-white",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#ffffff"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.25",
|
||||
"css": "--kbx-gray-25",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#fcfcfd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.50",
|
||||
"css": "--kbx-gray-50",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f9fafb"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.100",
|
||||
"css": "--kbx-gray-100",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f2f4f7"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.200",
|
||||
"css": "--kbx-gray-200",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#e4e7ec"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.300",
|
||||
"css": "--kbx-gray-300",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d0d5dd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.400",
|
||||
"css": "--kbx-gray-400",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#98a2b3"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.500",
|
||||
"css": "--kbx-gray-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#667085"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.700",
|
||||
"css": "--kbx-gray-700",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#344054"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.900",
|
||||
"css": "--kbx-gray-900",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#101828"
|
||||
},
|
||||
{
|
||||
"path": "color.blue.600",
|
||||
"css": "--kbx-blue-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#175cd3"
|
||||
},
|
||||
{
|
||||
"path": "color.green.600",
|
||||
"css": "--kbx-green-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#039855"
|
||||
},
|
||||
{
|
||||
"path": "color.orange.500",
|
||||
"css": "--kbx-orange-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f79009"
|
||||
},
|
||||
{
|
||||
"path": "color.red.600",
|
||||
"css": "--kbx-red-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d92d20"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.default",
|
||||
"css": "--kbx-color-surface",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.white}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.muted",
|
||||
"css": "--kbx-color-surface-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.50}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.subtle",
|
||||
"css": "--kbx-color-surface-subtle",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.100}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.hover",
|
||||
"css": "--kbx-color-surface-hover",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#f3f7fd"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.default",
|
||||
"css": "--kbx-color-text",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1d2939"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.muted",
|
||||
"css": "--kbx-color-text-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.default",
|
||||
"css": "--kbx-color-border",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.200}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.strong",
|
||||
"css": "--kbx-color-border-strong",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.400}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.action.primary",
|
||||
"css": "--kbx-color-primary",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.blue.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.success",
|
||||
"css": "--kbx-color-success",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.green.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.warning",
|
||||
"css": "--kbx-color-warning",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.orange.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.danger",
|
||||
"css": "--kbx-color-danger",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.red.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.focus",
|
||||
"css": "--kbx-color-focus",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1570ef"
|
||||
},
|
||||
{
|
||||
"path": "semantic.overlay",
|
||||
"css": "--kbx-color-overlay",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "rgba(16, 24, 40, .38)"
|
||||
},
|
||||
{
|
||||
"path": "spacing.0",
|
||||
"css": "--kbx-space-0",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"path": "spacing.1",
|
||||
"css": "--kbx-space-1",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.2",
|
||||
"css": "--kbx-space-2",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.3",
|
||||
"css": "--kbx-space-3",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.4",
|
||||
"css": "--kbx-space-4",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.5",
|
||||
"css": "--kbx-space-5",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.6",
|
||||
"css": "--kbx-space-6",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "24px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.8",
|
||||
"css": "--kbx-space-8",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "32px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.10",
|
||||
"css": "--kbx-space-10",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "40px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.12",
|
||||
"css": "--kbx-space-12",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "radius.sm",
|
||||
"css": "--kbx-radius-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "radius.md",
|
||||
"css": "--kbx-radius-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "6px"
|
||||
},
|
||||
{
|
||||
"path": "radius.lg",
|
||||
"css": "--kbx-radius-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "component.control.height",
|
||||
"css": "--kbx-control-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px",
|
||||
"description": "Desktop compact input/button baseline"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.rowHeight",
|
||||
"css": "--kbx-grid-row-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.headerHeight",
|
||||
"css": "--kbx-grid-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "36px"
|
||||
},
|
||||
{
|
||||
"path": "component.pageHeader.height",
|
||||
"css": "--kbx-page-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "component.commandBar.height",
|
||||
"css": "--kbx-command-bar-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "44px"
|
||||
},
|
||||
{
|
||||
"path": "component.form.labelWidth",
|
||||
"css": "--kbx-label-width",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "96px"
|
||||
},
|
||||
{
|
||||
"path": "component.touch.controlHeight",
|
||||
"css": "--kbx-control-touch",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "52px"
|
||||
}
|
||||
],
|
||||
"modes": {
|
||||
"compact": {
|
||||
"component.control.height": "34px",
|
||||
"component.grid.rowHeight": "34px",
|
||||
"component.grid.headerHeight": "36px"
|
||||
},
|
||||
"comfortable": {
|
||||
"component.control.height": "38px",
|
||||
"component.grid.rowHeight": "40px",
|
||||
"component.grid.headerHeight": "40px"
|
||||
},
|
||||
"touch": {
|
||||
"component.control.height": "52px",
|
||||
"component.grid.rowHeight": "52px",
|
||||
"component.grid.headerHeight": "48px"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSearchPanel",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxPageHeader",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxFormSection",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxConfirm",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelMenu",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxJobProgress",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAuditTrail",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxHelpPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAiPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxProposalPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxListPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterDetailPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQueuePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxReconcilePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,368 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": "0.0.0",
|
||||
"source": null,
|
||||
"sourceSha256": null,
|
||||
"count": 0,
|
||||
"fields": []
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,194 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"tokens": [
|
||||
{
|
||||
"path": "typography.fontFamily",
|
||||
"css": "--kbx-font-family",
|
||||
"type": "fontFamily",
|
||||
"role": "primitive",
|
||||
"value": "Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", Arial, sans-serif",
|
||||
"description": "업무 기본 Font Stack"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xs",
|
||||
"css": "--kbx-font-xs",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.sm",
|
||||
"css": "--kbx-font-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "13px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.md",
|
||||
"css": "--kbx-font-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "14px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.lg",
|
||||
"css": "--kbx-font-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xl",
|
||||
"css": "--kbx-font-xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "18px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.2xl",
|
||||
"css": "--kbx-font-2xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "color.white",
|
||||
"css": "--kbx-white",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#ffffff"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.25",
|
||||
"css": "--kbx-gray-25",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#fcfcfd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.50",
|
||||
"css": "--kbx-gray-50",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f9fafb"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.100",
|
||||
"css": "--kbx-gray-100",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f2f4f7"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.200",
|
||||
"css": "--kbx-gray-200",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#e4e7ec"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.300",
|
||||
"css": "--kbx-gray-300",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d0d5dd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.400",
|
||||
"css": "--kbx-gray-400",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#98a2b3"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.500",
|
||||
"css": "--kbx-gray-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#667085"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.700",
|
||||
"css": "--kbx-gray-700",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#344054"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.900",
|
||||
"css": "--kbx-gray-900",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#101828"
|
||||
},
|
||||
{
|
||||
"path": "color.blue.600",
|
||||
"css": "--kbx-blue-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#175cd3"
|
||||
},
|
||||
{
|
||||
"path": "color.green.600",
|
||||
"css": "--kbx-green-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#039855"
|
||||
},
|
||||
{
|
||||
"path": "color.orange.500",
|
||||
"css": "--kbx-orange-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f79009"
|
||||
},
|
||||
{
|
||||
"path": "color.red.600",
|
||||
"css": "--kbx-red-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d92d20"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.default",
|
||||
"css": "--kbx-color-surface",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.white}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.muted",
|
||||
"css": "--kbx-color-surface-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.50}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.subtle",
|
||||
"css": "--kbx-color-surface-subtle",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.100}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.hover",
|
||||
"css": "--kbx-color-surface-hover",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#f3f7fd"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.default",
|
||||
"css": "--kbx-color-text",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1d2939"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.muted",
|
||||
"css": "--kbx-color-text-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.default",
|
||||
"css": "--kbx-color-border",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.200}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.strong",
|
||||
"css": "--kbx-color-border-strong",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.400}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.action.primary",
|
||||
"css": "--kbx-color-primary",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.blue.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.success",
|
||||
"css": "--kbx-color-success",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.green.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.warning",
|
||||
"css": "--kbx-color-warning",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.orange.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.danger",
|
||||
"css": "--kbx-color-danger",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.red.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.focus",
|
||||
"css": "--kbx-color-focus",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1570ef"
|
||||
},
|
||||
{
|
||||
"path": "semantic.overlay",
|
||||
"css": "--kbx-color-overlay",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "rgba(16, 24, 40, .38)"
|
||||
},
|
||||
{
|
||||
"path": "spacing.0",
|
||||
"css": "--kbx-space-0",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"path": "spacing.1",
|
||||
"css": "--kbx-space-1",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.2",
|
||||
"css": "--kbx-space-2",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.3",
|
||||
"css": "--kbx-space-3",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.4",
|
||||
"css": "--kbx-space-4",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.5",
|
||||
"css": "--kbx-space-5",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.6",
|
||||
"css": "--kbx-space-6",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "24px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.8",
|
||||
"css": "--kbx-space-8",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "32px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.10",
|
||||
"css": "--kbx-space-10",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "40px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.12",
|
||||
"css": "--kbx-space-12",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "radius.sm",
|
||||
"css": "--kbx-radius-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "radius.md",
|
||||
"css": "--kbx-radius-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "6px"
|
||||
},
|
||||
{
|
||||
"path": "radius.lg",
|
||||
"css": "--kbx-radius-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "component.control.height",
|
||||
"css": "--kbx-control-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px",
|
||||
"description": "Desktop compact input/button baseline"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.rowHeight",
|
||||
"css": "--kbx-grid-row-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.headerHeight",
|
||||
"css": "--kbx-grid-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "36px"
|
||||
},
|
||||
{
|
||||
"path": "component.pageHeader.height",
|
||||
"css": "--kbx-page-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "component.commandBar.height",
|
||||
"css": "--kbx-command-bar-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "44px"
|
||||
},
|
||||
{
|
||||
"path": "component.form.labelWidth",
|
||||
"css": "--kbx-label-width",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "96px"
|
||||
},
|
||||
{
|
||||
"path": "component.touch.controlHeight",
|
||||
"css": "--kbx-control-touch",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "52px"
|
||||
}
|
||||
],
|
||||
"modes": {
|
||||
"compact": {
|
||||
"component.control.height": "34px",
|
||||
"component.grid.rowHeight": "34px",
|
||||
"component.grid.headerHeight": "36px"
|
||||
},
|
||||
"comfortable": {
|
||||
"component.control.height": "38px",
|
||||
"component.grid.rowHeight": "40px",
|
||||
"component.grid.headerHeight": "40px"
|
||||
},
|
||||
"touch": {
|
||||
"component.control.height": "52px",
|
||||
"component.grid.rowHeight": "52px",
|
||||
"component.grid.headerHeight": "48px"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
# KBX v13 Release Baseline
|
||||
|
||||
이 디렉터리는 v13 release candidate의 generated public contract snapshot이다.
|
||||
다음 Foundation iteration은 이 snapshot을 baseline으로 사용해 Screen/Component/Token/Field contract change level을 계산한다.
|
||||
@@ -0,0 +1,463 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"apiVersion": "1.0.0",
|
||||
"sourceSha256": "v13-adopted-runtime-baseline",
|
||||
"operationCount": 41,
|
||||
"operations": [
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/ai/ask",
|
||||
"permission": "common.ai.use",
|
||||
"id": "common.ai.ask",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/commit",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.commit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.createSession",
|
||||
"kind": "upload",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"contentType": "multipart/form-data"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/errors.xlsx",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.errorWorkbook",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.getSession",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "PUT",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/mapping",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/saved-mappings",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveNamedMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/{importType}/template",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.template",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/validate",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.validate",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/claim",
|
||||
"permission": "common.operations.claim",
|
||||
"id": "common.operations.claim",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/resolve",
|
||||
"permission": "common.operations.resolve",
|
||||
"id": "common.operations.resolve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/{id:guid}/retry",
|
||||
"permission": "common.operations.retry",
|
||||
"id": "common.operations.retry",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/operations/work-items",
|
||||
"permission": "common.operations.read",
|
||||
"id": "common.operations.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/reconcile/items/create-exceptions",
|
||||
"permission": "common.operations.create",
|
||||
"id": "common.reconcile.createExceptions",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/reconcile/items",
|
||||
"permission": "common.reconcile.read",
|
||||
"id": "common.reconcile.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notice",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notice",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/runtime/notifications/{Id}/read",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notificationRead",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notifications",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notifications",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/operations",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.operations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/suggestions",
|
||||
"permission": "common.suggestion.create",
|
||||
"id": "common.suggestions.submit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory/{itemId}/locations",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.locations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items/{id}",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.get",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/claims",
|
||||
"permission": "oms.claim.read",
|
||||
"id": "oms.claims.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/register",
|
||||
"permission": "oms.order.create",
|
||||
"id": "oms.orders.register",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/orders",
|
||||
"permission": "oms.order.read",
|
||||
"id": "oms.orders.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.getTask",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/exceptions",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.reportException",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/scan",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.scan",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200,
|
||||
422
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/quantity",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.setQuantity",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/start",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSearchPanel",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxPageHeader",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxFormSection",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxConfirm",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelMenu",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxJobProgress",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAuditTrail",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxHelpPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAiPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxProposalPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxListPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterDetailPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQueuePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxReconcilePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,368 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,695 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"source": "contracts/fields/kbx.fields.json",
|
||||
"sourceSha256": "9720246fe70ca49effd9e1e86fb580c624797cce68e71f35ad5e1b42f6263521",
|
||||
"count": 50,
|
||||
"fields": [
|
||||
{
|
||||
"key": "address1",
|
||||
"label": "주소",
|
||||
"aliases": [
|
||||
"기본주소",
|
||||
"배송주소",
|
||||
"Address1"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "address2",
|
||||
"label": "상세주소",
|
||||
"aliases": [
|
||||
"주소2",
|
||||
"Address2"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "allocatedQty",
|
||||
"label": "할당수량",
|
||||
"aliases": [
|
||||
"AllocatedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "amount",
|
||||
"label": "금액",
|
||||
"aliases": [
|
||||
"Amount",
|
||||
"주문금액"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 2,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "availableQty",
|
||||
"label": "가용재고",
|
||||
"aliases": [
|
||||
"AvailableQty",
|
||||
"출고가능수량"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "barcode",
|
||||
"label": "바코드",
|
||||
"aliases": [
|
||||
"Barcode",
|
||||
"EAN",
|
||||
"JAN"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelId",
|
||||
"label": "판매채널ID",
|
||||
"aliases": [
|
||||
"ChannelId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "salesChannel",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelName",
|
||||
"label": "판매채널",
|
||||
"aliases": [
|
||||
"ChannelName",
|
||||
"채널"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdAt",
|
||||
"label": "등록일시",
|
||||
"aliases": [
|
||||
"CreatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdBy",
|
||||
"label": "등록자",
|
||||
"aliases": [
|
||||
"CreatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerCode",
|
||||
"label": "거래처코드",
|
||||
"aliases": [
|
||||
"거래처",
|
||||
"업체코드",
|
||||
"CustomerCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "customer",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerId",
|
||||
"label": "거래처ID",
|
||||
"aliases": [
|
||||
"CustomerId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "customer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerName",
|
||||
"label": "거래처명",
|
||||
"aliases": [
|
||||
"CustomerName",
|
||||
"업체명"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "damagedQty",
|
||||
"label": "불량수량",
|
||||
"aliases": [
|
||||
"DamagedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "exceptionCount",
|
||||
"label": "예외건수",
|
||||
"aliases": [
|
||||
"ExceptionCount",
|
||||
"오류건수"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "expiryDate",
|
||||
"label": "유통기한",
|
||||
"aliases": [
|
||||
"ExpiryDate",
|
||||
"ExpirationDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "holdQty",
|
||||
"label": "보류수량",
|
||||
"aliases": [
|
||||
"HoldQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemCode",
|
||||
"label": "품목코드",
|
||||
"aliases": [
|
||||
"상품코드",
|
||||
"SKU",
|
||||
"ItemCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemId",
|
||||
"label": "품목ID",
|
||||
"aliases": [
|
||||
"ItemId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "item",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemName",
|
||||
"label": "품목명",
|
||||
"aliases": [
|
||||
"상품명",
|
||||
"ItemName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 300,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemSummary",
|
||||
"label": "대표상품",
|
||||
"aliases": [
|
||||
"ItemSummary"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationCode",
|
||||
"label": "로케이션",
|
||||
"aliases": [
|
||||
"Location",
|
||||
"LocationCode",
|
||||
"위치"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "location",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationId",
|
||||
"label": "로케이션ID",
|
||||
"aliases": [
|
||||
"LocationId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "location",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "lotNo",
|
||||
"label": "LOT",
|
||||
"aliases": [
|
||||
"LotNo",
|
||||
"LOT번호"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "occurredAt",
|
||||
"label": "발생시각",
|
||||
"aliases": [
|
||||
"OccurredAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "onHandQty",
|
||||
"label": "현재고",
|
||||
"aliases": [
|
||||
"OnHandQty",
|
||||
"장부재고"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderDate",
|
||||
"label": "주문일",
|
||||
"aliases": [
|
||||
"주문일자",
|
||||
"OrderDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"required": true,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderedAt",
|
||||
"label": "주문일시",
|
||||
"aliases": [
|
||||
"OrderedAt",
|
||||
"주문시간"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderId",
|
||||
"label": "주문ID",
|
||||
"aliases": [
|
||||
"OrderId"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderNo",
|
||||
"label": "주문번호",
|
||||
"aliases": [
|
||||
"OrderNo",
|
||||
"주문ID"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderQty",
|
||||
"label": "주문수량",
|
||||
"aliases": [
|
||||
"주문수량",
|
||||
"수량",
|
||||
"Qty",
|
||||
"OrderQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false,
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"key": "ownerName",
|
||||
"label": "담당자",
|
||||
"aliases": [
|
||||
"OwnerName",
|
||||
"담당"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 100,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "phone",
|
||||
"label": "연락처",
|
||||
"aliases": [
|
||||
"휴대폰",
|
||||
"전화번호",
|
||||
"Phone"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "phone"
|
||||
},
|
||||
{
|
||||
"key": "pickedQty",
|
||||
"label": "피킹수량",
|
||||
"aliases": [
|
||||
"PickedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "postalCode",
|
||||
"label": "우편번호",
|
||||
"aliases": [
|
||||
"ZipCode",
|
||||
"PostalCode"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 20,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "quantity",
|
||||
"label": "수량",
|
||||
"aliases": [
|
||||
"Qty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "receiverName",
|
||||
"label": "수취인",
|
||||
"aliases": [
|
||||
"받는분",
|
||||
"수령인",
|
||||
"ReceiverName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "name"
|
||||
},
|
||||
{
|
||||
"key": "referenceNo",
|
||||
"label": "참조번호",
|
||||
"aliases": [
|
||||
"ReferenceNo"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "remark",
|
||||
"label": "비고",
|
||||
"aliases": [
|
||||
"메모",
|
||||
"배송메모",
|
||||
"Remark"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "shippedQty",
|
||||
"label": "출고수량",
|
||||
"aliases": [
|
||||
"ShippedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "specification",
|
||||
"label": "규격",
|
||||
"aliases": [
|
||||
"Specification",
|
||||
"Spec"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "status",
|
||||
"label": "상태",
|
||||
"aliases": [
|
||||
"Status"
|
||||
],
|
||||
"dataType": "status",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "totalQty",
|
||||
"label": "총수량",
|
||||
"aliases": [
|
||||
"TotalQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "unitPrice",
|
||||
"label": "단가",
|
||||
"aliases": [
|
||||
"판매단가",
|
||||
"UnitPrice"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedAt",
|
||||
"label": "수정일시",
|
||||
"aliases": [
|
||||
"UpdatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedBy",
|
||||
"label": "수정자",
|
||||
"aliases": [
|
||||
"UpdatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "version",
|
||||
"label": "버전",
|
||||
"aliases": [
|
||||
"Version",
|
||||
"RowVersion"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseCode",
|
||||
"label": "창고코드",
|
||||
"aliases": [
|
||||
"창고",
|
||||
"창고코드",
|
||||
"출고창고",
|
||||
"WarehouseCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "warehouse",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseId",
|
||||
"label": "창고ID",
|
||||
"aliases": [
|
||||
"WarehouseId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "warehouse",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseName",
|
||||
"label": "창고명",
|
||||
"aliases": [
|
||||
"WarehouseName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"sourceSha256": "v13-ts-contract-baseline",
|
||||
"types": [
|
||||
"validation",
|
||||
"business-rule",
|
||||
"conflict",
|
||||
"system"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"tokens": [
|
||||
{
|
||||
"path": "typography.fontFamily",
|
||||
"css": "--kbx-font-family",
|
||||
"type": "fontFamily",
|
||||
"role": "primitive",
|
||||
"value": "Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", Arial, sans-serif",
|
||||
"description": "업무 기본 Font Stack"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xs",
|
||||
"css": "--kbx-font-xs",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.sm",
|
||||
"css": "--kbx-font-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "13px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.md",
|
||||
"css": "--kbx-font-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "14px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.lg",
|
||||
"css": "--kbx-font-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xl",
|
||||
"css": "--kbx-font-xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "18px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.2xl",
|
||||
"css": "--kbx-font-2xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "color.white",
|
||||
"css": "--kbx-white",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#ffffff"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.25",
|
||||
"css": "--kbx-gray-25",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#fcfcfd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.50",
|
||||
"css": "--kbx-gray-50",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f9fafb"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.100",
|
||||
"css": "--kbx-gray-100",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f2f4f7"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.200",
|
||||
"css": "--kbx-gray-200",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#e4e7ec"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.300",
|
||||
"css": "--kbx-gray-300",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d0d5dd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.400",
|
||||
"css": "--kbx-gray-400",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#98a2b3"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.500",
|
||||
"css": "--kbx-gray-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#667085"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.700",
|
||||
"css": "--kbx-gray-700",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#344054"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.900",
|
||||
"css": "--kbx-gray-900",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#101828"
|
||||
},
|
||||
{
|
||||
"path": "color.blue.600",
|
||||
"css": "--kbx-blue-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#175cd3"
|
||||
},
|
||||
{
|
||||
"path": "color.green.600",
|
||||
"css": "--kbx-green-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#039855"
|
||||
},
|
||||
{
|
||||
"path": "color.orange.500",
|
||||
"css": "--kbx-orange-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f79009"
|
||||
},
|
||||
{
|
||||
"path": "color.red.600",
|
||||
"css": "--kbx-red-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d92d20"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.default",
|
||||
"css": "--kbx-color-surface",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.white}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.muted",
|
||||
"css": "--kbx-color-surface-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.50}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.subtle",
|
||||
"css": "--kbx-color-surface-subtle",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.100}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.hover",
|
||||
"css": "--kbx-color-surface-hover",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#f3f7fd"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.default",
|
||||
"css": "--kbx-color-text",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1d2939"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.muted",
|
||||
"css": "--kbx-color-text-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.default",
|
||||
"css": "--kbx-color-border",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.200}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.strong",
|
||||
"css": "--kbx-color-border-strong",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.400}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.action.primary",
|
||||
"css": "--kbx-color-primary",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.blue.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.success",
|
||||
"css": "--kbx-color-success",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.green.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.warning",
|
||||
"css": "--kbx-color-warning",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.orange.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.danger",
|
||||
"css": "--kbx-color-danger",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.red.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.focus",
|
||||
"css": "--kbx-color-focus",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1570ef"
|
||||
},
|
||||
{
|
||||
"path": "semantic.overlay",
|
||||
"css": "--kbx-color-overlay",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "rgba(16, 24, 40, .38)"
|
||||
},
|
||||
{
|
||||
"path": "spacing.0",
|
||||
"css": "--kbx-space-0",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"path": "spacing.1",
|
||||
"css": "--kbx-space-1",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.2",
|
||||
"css": "--kbx-space-2",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.3",
|
||||
"css": "--kbx-space-3",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.4",
|
||||
"css": "--kbx-space-4",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.5",
|
||||
"css": "--kbx-space-5",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.6",
|
||||
"css": "--kbx-space-6",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "24px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.8",
|
||||
"css": "--kbx-space-8",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "32px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.10",
|
||||
"css": "--kbx-space-10",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "40px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.12",
|
||||
"css": "--kbx-space-12",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "radius.sm",
|
||||
"css": "--kbx-radius-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "radius.md",
|
||||
"css": "--kbx-radius-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "6px"
|
||||
},
|
||||
{
|
||||
"path": "radius.lg",
|
||||
"css": "--kbx-radius-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "component.control.height",
|
||||
"css": "--kbx-control-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px",
|
||||
"description": "Desktop compact input/button baseline"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.rowHeight",
|
||||
"css": "--kbx-grid-row-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.headerHeight",
|
||||
"css": "--kbx-grid-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "36px"
|
||||
},
|
||||
{
|
||||
"path": "component.pageHeader.height",
|
||||
"css": "--kbx-page-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "component.commandBar.height",
|
||||
"css": "--kbx-command-bar-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "44px"
|
||||
},
|
||||
{
|
||||
"path": "component.form.labelWidth",
|
||||
"css": "--kbx-label-width",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "96px"
|
||||
},
|
||||
{
|
||||
"path": "component.touch.controlHeight",
|
||||
"css": "--kbx-control-touch",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "52px"
|
||||
}
|
||||
],
|
||||
"modes": {
|
||||
"compact": {
|
||||
"component.control.height": "34px",
|
||||
"component.grid.rowHeight": "34px",
|
||||
"component.grid.headerHeight": "36px"
|
||||
},
|
||||
"comfortable": {
|
||||
"component.control.height": "38px",
|
||||
"component.grid.rowHeight": "40px",
|
||||
"component.grid.headerHeight": "40px"
|
||||
},
|
||||
"touch": {
|
||||
"component.control.height": "52px",
|
||||
"component.grid.rowHeight": "52px",
|
||||
"component.grid.headerHeight": "48px"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
# v14 Baseline
|
||||
|
||||
KBX Foundation v14 public Screen / Component / Token / Field / API / Problem contract baseline.
|
||||
Future release impact analysis should use these immutable generated manifests when `governance/release.json` advances its baseline to `v14`.
|
||||
@@ -0,0 +1,518 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"apiVersion": "1.0.0",
|
||||
"sourceSha256": "755cce76d76e9077014434dea59a8dc02cf2017a654befa79c119543d425ff2e",
|
||||
"operationCount": 46,
|
||||
"operations": [
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/ai/ask",
|
||||
"permission": "common.ai.use",
|
||||
"id": "common.ai.ask",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/commit",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.commit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.createSession",
|
||||
"kind": "upload",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"contentType": "multipart/form-data"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/errors.xlsx",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.errorWorkbook",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.getSession",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "PUT",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/mapping",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/saved-mappings",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveNamedMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/{importType}/template",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.template",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/validate",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.validate",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/claim",
|
||||
"permission": "common.operations.claim",
|
||||
"id": "common.operations.claim",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/resolve",
|
||||
"permission": "common.operations.resolve",
|
||||
"id": "common.operations.resolve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/{id:guid}/retry",
|
||||
"permission": "common.operations.retry",
|
||||
"id": "common.operations.retry",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/operations/work-items",
|
||||
"permission": "common.operations.read",
|
||||
"id": "common.operations.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/reconcile/items/create-exceptions",
|
||||
"permission": "common.operations.create",
|
||||
"id": "common.reconcile.createExceptions",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/reconcile/items",
|
||||
"permission": "common.reconcile.read",
|
||||
"id": "common.reconcile.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notice",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notice",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/runtime/notifications/{Id}/read",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notificationRead",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notifications",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notifications",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/operations",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.operations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/suggestions",
|
||||
"permission": "common.suggestion.create",
|
||||
"id": "common.suggestions.submit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory/{itemId}/locations",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.locations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items/{id}",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.get",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/approve",
|
||||
"permission": "oms.claim.approve",
|
||||
"id": "oms.claims.approve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/complete",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.complete",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/hold",
|
||||
"permission": "oms.claim.hold",
|
||||
"id": "oms.claims.hold",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/claims",
|
||||
"permission": "oms.claim.read",
|
||||
"id": "oms.claims.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/start",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/register",
|
||||
"permission": "oms.order.create",
|
||||
"id": "oms.orders.register",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/orders",
|
||||
"permission": "oms.order.read",
|
||||
"id": "oms.orders.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/ship",
|
||||
"permission": "oms.order.ship",
|
||||
"id": "oms.orders.ship",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.getTask",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/exceptions",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.reportException",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/scan",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.scan",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200,
|
||||
422
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/quantity",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.setQuantity",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/start",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSearchPanel",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxPageHeader",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxFormSection",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxConfirm",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelMenu",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxJobProgress",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAuditTrail",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxHelpPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAiPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxProposalPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxListPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterDetailPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQueuePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxReconcilePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,368 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,695 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"source": "contracts/fields/kbx.fields.json",
|
||||
"sourceSha256": "9720246fe70ca49effd9e1e86fb580c624797cce68e71f35ad5e1b42f6263521",
|
||||
"count": 50,
|
||||
"fields": [
|
||||
{
|
||||
"key": "address1",
|
||||
"label": "주소",
|
||||
"aliases": [
|
||||
"기본주소",
|
||||
"배송주소",
|
||||
"Address1"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "address2",
|
||||
"label": "상세주소",
|
||||
"aliases": [
|
||||
"주소2",
|
||||
"Address2"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "allocatedQty",
|
||||
"label": "할당수량",
|
||||
"aliases": [
|
||||
"AllocatedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "amount",
|
||||
"label": "금액",
|
||||
"aliases": [
|
||||
"Amount",
|
||||
"주문금액"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 2,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "availableQty",
|
||||
"label": "가용재고",
|
||||
"aliases": [
|
||||
"AvailableQty",
|
||||
"출고가능수량"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "barcode",
|
||||
"label": "바코드",
|
||||
"aliases": [
|
||||
"Barcode",
|
||||
"EAN",
|
||||
"JAN"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelId",
|
||||
"label": "판매채널ID",
|
||||
"aliases": [
|
||||
"ChannelId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "salesChannel",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelName",
|
||||
"label": "판매채널",
|
||||
"aliases": [
|
||||
"ChannelName",
|
||||
"채널"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdAt",
|
||||
"label": "등록일시",
|
||||
"aliases": [
|
||||
"CreatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdBy",
|
||||
"label": "등록자",
|
||||
"aliases": [
|
||||
"CreatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerCode",
|
||||
"label": "거래처코드",
|
||||
"aliases": [
|
||||
"거래처",
|
||||
"업체코드",
|
||||
"CustomerCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "customer",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerId",
|
||||
"label": "거래처ID",
|
||||
"aliases": [
|
||||
"CustomerId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "customer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerName",
|
||||
"label": "거래처명",
|
||||
"aliases": [
|
||||
"CustomerName",
|
||||
"업체명"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "damagedQty",
|
||||
"label": "불량수량",
|
||||
"aliases": [
|
||||
"DamagedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "exceptionCount",
|
||||
"label": "예외건수",
|
||||
"aliases": [
|
||||
"ExceptionCount",
|
||||
"오류건수"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "expiryDate",
|
||||
"label": "유통기한",
|
||||
"aliases": [
|
||||
"ExpiryDate",
|
||||
"ExpirationDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "holdQty",
|
||||
"label": "보류수량",
|
||||
"aliases": [
|
||||
"HoldQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemCode",
|
||||
"label": "품목코드",
|
||||
"aliases": [
|
||||
"상품코드",
|
||||
"SKU",
|
||||
"ItemCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemId",
|
||||
"label": "품목ID",
|
||||
"aliases": [
|
||||
"ItemId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "item",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemName",
|
||||
"label": "품목명",
|
||||
"aliases": [
|
||||
"상품명",
|
||||
"ItemName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 300,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemSummary",
|
||||
"label": "대표상품",
|
||||
"aliases": [
|
||||
"ItemSummary"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationCode",
|
||||
"label": "로케이션",
|
||||
"aliases": [
|
||||
"Location",
|
||||
"LocationCode",
|
||||
"위치"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "location",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationId",
|
||||
"label": "로케이션ID",
|
||||
"aliases": [
|
||||
"LocationId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "location",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "lotNo",
|
||||
"label": "LOT",
|
||||
"aliases": [
|
||||
"LotNo",
|
||||
"LOT번호"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "occurredAt",
|
||||
"label": "발생시각",
|
||||
"aliases": [
|
||||
"OccurredAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "onHandQty",
|
||||
"label": "현재고",
|
||||
"aliases": [
|
||||
"OnHandQty",
|
||||
"장부재고"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderDate",
|
||||
"label": "주문일",
|
||||
"aliases": [
|
||||
"주문일자",
|
||||
"OrderDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"required": true,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderedAt",
|
||||
"label": "주문일시",
|
||||
"aliases": [
|
||||
"OrderedAt",
|
||||
"주문시간"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderId",
|
||||
"label": "주문ID",
|
||||
"aliases": [
|
||||
"OrderId"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderNo",
|
||||
"label": "주문번호",
|
||||
"aliases": [
|
||||
"OrderNo",
|
||||
"주문ID"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderQty",
|
||||
"label": "주문수량",
|
||||
"aliases": [
|
||||
"주문수량",
|
||||
"수량",
|
||||
"Qty",
|
||||
"OrderQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false,
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"key": "ownerName",
|
||||
"label": "담당자",
|
||||
"aliases": [
|
||||
"OwnerName",
|
||||
"담당"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 100,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "phone",
|
||||
"label": "연락처",
|
||||
"aliases": [
|
||||
"휴대폰",
|
||||
"전화번호",
|
||||
"Phone"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "phone"
|
||||
},
|
||||
{
|
||||
"key": "pickedQty",
|
||||
"label": "피킹수량",
|
||||
"aliases": [
|
||||
"PickedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "postalCode",
|
||||
"label": "우편번호",
|
||||
"aliases": [
|
||||
"ZipCode",
|
||||
"PostalCode"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 20,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "quantity",
|
||||
"label": "수량",
|
||||
"aliases": [
|
||||
"Qty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "receiverName",
|
||||
"label": "수취인",
|
||||
"aliases": [
|
||||
"받는분",
|
||||
"수령인",
|
||||
"ReceiverName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "name"
|
||||
},
|
||||
{
|
||||
"key": "referenceNo",
|
||||
"label": "참조번호",
|
||||
"aliases": [
|
||||
"ReferenceNo"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "remark",
|
||||
"label": "비고",
|
||||
"aliases": [
|
||||
"메모",
|
||||
"배송메모",
|
||||
"Remark"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "shippedQty",
|
||||
"label": "출고수량",
|
||||
"aliases": [
|
||||
"ShippedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "specification",
|
||||
"label": "규격",
|
||||
"aliases": [
|
||||
"Specification",
|
||||
"Spec"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "status",
|
||||
"label": "상태",
|
||||
"aliases": [
|
||||
"Status"
|
||||
],
|
||||
"dataType": "status",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "totalQty",
|
||||
"label": "총수량",
|
||||
"aliases": [
|
||||
"TotalQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "unitPrice",
|
||||
"label": "단가",
|
||||
"aliases": [
|
||||
"판매단가",
|
||||
"UnitPrice"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedAt",
|
||||
"label": "수정일시",
|
||||
"aliases": [
|
||||
"UpdatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedBy",
|
||||
"label": "수정자",
|
||||
"aliases": [
|
||||
"UpdatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "version",
|
||||
"label": "버전",
|
||||
"aliases": [
|
||||
"Version",
|
||||
"RowVersion"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseCode",
|
||||
"label": "창고코드",
|
||||
"aliases": [
|
||||
"창고",
|
||||
"창고코드",
|
||||
"출고창고",
|
||||
"WarehouseCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "warehouse",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseId",
|
||||
"label": "창고ID",
|
||||
"aliases": [
|
||||
"WarehouseId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "warehouse",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseName",
|
||||
"label": "창고명",
|
||||
"aliases": [
|
||||
"WarehouseName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,386 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"permissionVersion": "0.9.0",
|
||||
"permissions": [
|
||||
{
|
||||
"id": "common.ai.use",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "use",
|
||||
"risk": "medium",
|
||||
"description": "AI 설명·추천·초안 기능 사용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.claim",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "claim",
|
||||
"risk": "medium",
|
||||
"description": "업무 예외를 내 처리건으로 지정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.create",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "대사 결과에서 운영 예외 생성",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.read",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 예외 센터 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.resolve",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "resolve",
|
||||
"risk": "high",
|
||||
"description": "수동 해결이 허용된 운영 예외 해결",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.retry",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "retry",
|
||||
"risk": "high",
|
||||
"description": "등록된 안전한 예외 Action 재처리",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.reconcile.read",
|
||||
"module": "COMMON",
|
||||
"resource": "reconcile",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 데이터 대사 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.runtime.read",
|
||||
"module": "COMMON",
|
||||
"resource": "runtime",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "런타임 상태·작업·알림 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.suggestion.create",
|
||||
"module": "COMMON",
|
||||
"resource": "suggestion",
|
||||
"action": "create",
|
||||
"risk": "low",
|
||||
"description": "현재 화면 사용자 제안 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "재고이동 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고이동 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.receive",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "receive",
|
||||
"risk": "high",
|
||||
"description": "이동재고 입고완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.ship",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "이동재고 출고",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.write",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "재고이동 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고현황 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.create",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "품목 신규·복사",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.read",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "품목 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.write",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "품목 수정·사용중지",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.cancel",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "cancel",
|
||||
"risk": "high",
|
||||
"description": "구매 취소",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "구매 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.read",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "구매 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.write",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "구매 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "imports.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "imports",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "Excel Import 생성·검증·반영",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "kbx.design.read",
|
||||
"module": "COMMON",
|
||||
"resource": "design-system",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX 내부 컴포넌트 카탈로그 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.approve",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "approve",
|
||||
"risk": "high",
|
||||
"description": "클레임 승인",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.hold",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "hold",
|
||||
"risk": "medium",
|
||||
"description": "클레임 보류",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.process",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "process",
|
||||
"risk": "high",
|
||||
"description": "클레임 처리 시작·완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.read",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "반품·클레임 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.create",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "주문 신규 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.import",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "import",
|
||||
"risk": "high",
|
||||
"description": "주문 Excel Import 실행",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.read",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "주문 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.ship",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "주문 출고지시",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.inventory.count",
|
||||
"module": "WMS",
|
||||
"resource": "inventory",
|
||||
"action": "count",
|
||||
"risk": "high",
|
||||
"description": "현장 재고실사 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.picking.execute",
|
||||
"module": "WMS",
|
||||
"resource": "picking",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "출고 피킹 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.putaway.execute",
|
||||
"module": "WMS",
|
||||
"resource": "putaway",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 적치 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.receiving.execute",
|
||||
"module": "WMS",
|
||||
"resource": "receiving",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 검수 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.execute",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "WMS 작업 시작",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.read",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "WMS 작업 Queue 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"sourceSha256": "5c06fd380f07e56e7e0188cce405dfaf2c1a2361a2d3526237c96e8a6802cd42",
|
||||
"types": [
|
||||
"validation",
|
||||
"business-rule",
|
||||
"conflict",
|
||||
"permission",
|
||||
"not-found",
|
||||
"integration",
|
||||
"system"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"policies": [],
|
||||
"ai": {
|
||||
"usePermission": "common.ai.use"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"tokens": [
|
||||
{
|
||||
"path": "typography.fontFamily",
|
||||
"css": "--kbx-font-family",
|
||||
"type": "fontFamily",
|
||||
"role": "primitive",
|
||||
"value": "Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", Arial, sans-serif",
|
||||
"description": "업무 기본 Font Stack"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xs",
|
||||
"css": "--kbx-font-xs",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.sm",
|
||||
"css": "--kbx-font-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "13px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.md",
|
||||
"css": "--kbx-font-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "14px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.lg",
|
||||
"css": "--kbx-font-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xl",
|
||||
"css": "--kbx-font-xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "18px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.2xl",
|
||||
"css": "--kbx-font-2xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "color.white",
|
||||
"css": "--kbx-white",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#ffffff"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.25",
|
||||
"css": "--kbx-gray-25",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#fcfcfd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.50",
|
||||
"css": "--kbx-gray-50",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f9fafb"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.100",
|
||||
"css": "--kbx-gray-100",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f2f4f7"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.200",
|
||||
"css": "--kbx-gray-200",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#e4e7ec"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.300",
|
||||
"css": "--kbx-gray-300",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d0d5dd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.400",
|
||||
"css": "--kbx-gray-400",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#98a2b3"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.500",
|
||||
"css": "--kbx-gray-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#667085"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.700",
|
||||
"css": "--kbx-gray-700",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#344054"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.900",
|
||||
"css": "--kbx-gray-900",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#101828"
|
||||
},
|
||||
{
|
||||
"path": "color.blue.600",
|
||||
"css": "--kbx-blue-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#175cd3"
|
||||
},
|
||||
{
|
||||
"path": "color.green.600",
|
||||
"css": "--kbx-green-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#039855"
|
||||
},
|
||||
{
|
||||
"path": "color.orange.500",
|
||||
"css": "--kbx-orange-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f79009"
|
||||
},
|
||||
{
|
||||
"path": "color.red.600",
|
||||
"css": "--kbx-red-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d92d20"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.default",
|
||||
"css": "--kbx-color-surface",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.white}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.muted",
|
||||
"css": "--kbx-color-surface-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.50}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.subtle",
|
||||
"css": "--kbx-color-surface-subtle",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.100}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.hover",
|
||||
"css": "--kbx-color-surface-hover",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#f3f7fd"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.default",
|
||||
"css": "--kbx-color-text",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1d2939"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.muted",
|
||||
"css": "--kbx-color-text-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.default",
|
||||
"css": "--kbx-color-border",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.200}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.strong",
|
||||
"css": "--kbx-color-border-strong",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.400}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.action.primary",
|
||||
"css": "--kbx-color-primary",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.blue.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.success",
|
||||
"css": "--kbx-color-success",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.green.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.warning",
|
||||
"css": "--kbx-color-warning",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.orange.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.danger",
|
||||
"css": "--kbx-color-danger",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.red.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.focus",
|
||||
"css": "--kbx-color-focus",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1570ef"
|
||||
},
|
||||
{
|
||||
"path": "semantic.overlay",
|
||||
"css": "--kbx-color-overlay",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "rgba(16, 24, 40, .38)"
|
||||
},
|
||||
{
|
||||
"path": "spacing.0",
|
||||
"css": "--kbx-space-0",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"path": "spacing.1",
|
||||
"css": "--kbx-space-1",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.2",
|
||||
"css": "--kbx-space-2",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.3",
|
||||
"css": "--kbx-space-3",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.4",
|
||||
"css": "--kbx-space-4",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.5",
|
||||
"css": "--kbx-space-5",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.6",
|
||||
"css": "--kbx-space-6",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "24px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.8",
|
||||
"css": "--kbx-space-8",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "32px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.10",
|
||||
"css": "--kbx-space-10",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "40px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.12",
|
||||
"css": "--kbx-space-12",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "radius.sm",
|
||||
"css": "--kbx-radius-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "radius.md",
|
||||
"css": "--kbx-radius-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "6px"
|
||||
},
|
||||
{
|
||||
"path": "radius.lg",
|
||||
"css": "--kbx-radius-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "component.control.height",
|
||||
"css": "--kbx-control-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px",
|
||||
"description": "Desktop compact input/button baseline"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.rowHeight",
|
||||
"css": "--kbx-grid-row-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.headerHeight",
|
||||
"css": "--kbx-grid-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "36px"
|
||||
},
|
||||
{
|
||||
"path": "component.pageHeader.height",
|
||||
"css": "--kbx-page-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "component.commandBar.height",
|
||||
"css": "--kbx-command-bar-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "44px"
|
||||
},
|
||||
{
|
||||
"path": "component.form.labelWidth",
|
||||
"css": "--kbx-label-width",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "96px"
|
||||
},
|
||||
{
|
||||
"path": "component.touch.controlHeight",
|
||||
"css": "--kbx-control-touch",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "52px"
|
||||
}
|
||||
],
|
||||
"modes": {
|
||||
"compact": {
|
||||
"component.control.height": "34px",
|
||||
"component.grid.rowHeight": "34px",
|
||||
"component.grid.headerHeight": "36px"
|
||||
},
|
||||
"comfortable": {
|
||||
"component.control.height": "38px",
|
||||
"component.grid.rowHeight": "40px",
|
||||
"component.grid.headerHeight": "40px"
|
||||
},
|
||||
"touch": {
|
||||
"component.control.height": "52px",
|
||||
"component.grid.rowHeight": "52px",
|
||||
"component.grid.headerHeight": "48px"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# v15 Baseline
|
||||
|
||||
Generated public contract baseline for the next KBX release comparison.
|
||||
@@ -0,0 +1,518 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"apiVersion": "1.0.0",
|
||||
"sourceSha256": "755cce76d76e9077014434dea59a8dc02cf2017a654befa79c119543d425ff2e",
|
||||
"operationCount": 46,
|
||||
"operations": [
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/ai/ask",
|
||||
"permission": "common.ai.use",
|
||||
"id": "common.ai.ask",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/commit",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.commit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.createSession",
|
||||
"kind": "upload",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"contentType": "multipart/form-data"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/errors.xlsx",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.errorWorkbook",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.getSession",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "PUT",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/mapping",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/saved-mappings",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveNamedMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/{importType}/template",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.template",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/validate",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.validate",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/claim",
|
||||
"permission": "common.operations.claim",
|
||||
"id": "common.operations.claim",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/resolve",
|
||||
"permission": "common.operations.resolve",
|
||||
"id": "common.operations.resolve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/{id:guid}/retry",
|
||||
"permission": "common.operations.retry",
|
||||
"id": "common.operations.retry",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/operations/work-items",
|
||||
"permission": "common.operations.read",
|
||||
"id": "common.operations.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/reconcile/items/create-exceptions",
|
||||
"permission": "common.operations.create",
|
||||
"id": "common.reconcile.createExceptions",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/reconcile/items",
|
||||
"permission": "common.reconcile.read",
|
||||
"id": "common.reconcile.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notice",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notice",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/runtime/notifications/{Id}/read",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notificationRead",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notifications",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notifications",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/operations",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.operations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/suggestions",
|
||||
"permission": "common.suggestion.create",
|
||||
"id": "common.suggestions.submit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory/{itemId}/locations",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.locations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items/{id}",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.get",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/approve",
|
||||
"permission": "oms.claim.approve",
|
||||
"id": "oms.claims.approve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/complete",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.complete",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/hold",
|
||||
"permission": "oms.claim.hold",
|
||||
"id": "oms.claims.hold",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/claims",
|
||||
"permission": "oms.claim.read",
|
||||
"id": "oms.claims.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/start",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/register",
|
||||
"permission": "oms.order.create",
|
||||
"id": "oms.orders.register",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/orders",
|
||||
"permission": "oms.order.read",
|
||||
"id": "oms.orders.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/ship",
|
||||
"permission": "oms.order.ship",
|
||||
"id": "oms.orders.ship",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.getTask",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/exceptions",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.reportException",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/scan",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.scan",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200,
|
||||
422
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/quantity",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.setQuantity",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/start",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSearchPanel",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxPageHeader",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxFormSection",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxConfirm",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelMenu",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxJobProgress",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAuditTrail",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxHelpPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAiPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxProposalPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxListPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterDetailPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQueuePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxReconcilePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,374 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMaskedValue",
|
||||
"category": "business",
|
||||
"purpose": "민감정보의 기본 마스킹·권한 기반 전체보기 진입점을 표준화",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,695 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"source": "contracts/fields/kbx.fields.json",
|
||||
"sourceSha256": "9720246fe70ca49effd9e1e86fb580c624797cce68e71f35ad5e1b42f6263521",
|
||||
"count": 50,
|
||||
"fields": [
|
||||
{
|
||||
"key": "address1",
|
||||
"label": "주소",
|
||||
"aliases": [
|
||||
"기본주소",
|
||||
"배송주소",
|
||||
"Address1"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "address2",
|
||||
"label": "상세주소",
|
||||
"aliases": [
|
||||
"주소2",
|
||||
"Address2"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "allocatedQty",
|
||||
"label": "할당수량",
|
||||
"aliases": [
|
||||
"AllocatedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "amount",
|
||||
"label": "금액",
|
||||
"aliases": [
|
||||
"Amount",
|
||||
"주문금액"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 2,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "availableQty",
|
||||
"label": "가용재고",
|
||||
"aliases": [
|
||||
"AvailableQty",
|
||||
"출고가능수량"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "barcode",
|
||||
"label": "바코드",
|
||||
"aliases": [
|
||||
"Barcode",
|
||||
"EAN",
|
||||
"JAN"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelId",
|
||||
"label": "판매채널ID",
|
||||
"aliases": [
|
||||
"ChannelId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "salesChannel",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelName",
|
||||
"label": "판매채널",
|
||||
"aliases": [
|
||||
"ChannelName",
|
||||
"채널"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdAt",
|
||||
"label": "등록일시",
|
||||
"aliases": [
|
||||
"CreatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdBy",
|
||||
"label": "등록자",
|
||||
"aliases": [
|
||||
"CreatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerCode",
|
||||
"label": "거래처코드",
|
||||
"aliases": [
|
||||
"거래처",
|
||||
"업체코드",
|
||||
"CustomerCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "customer",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerId",
|
||||
"label": "거래처ID",
|
||||
"aliases": [
|
||||
"CustomerId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "customer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerName",
|
||||
"label": "거래처명",
|
||||
"aliases": [
|
||||
"CustomerName",
|
||||
"업체명"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "damagedQty",
|
||||
"label": "불량수량",
|
||||
"aliases": [
|
||||
"DamagedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "exceptionCount",
|
||||
"label": "예외건수",
|
||||
"aliases": [
|
||||
"ExceptionCount",
|
||||
"오류건수"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "expiryDate",
|
||||
"label": "유통기한",
|
||||
"aliases": [
|
||||
"ExpiryDate",
|
||||
"ExpirationDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "holdQty",
|
||||
"label": "보류수량",
|
||||
"aliases": [
|
||||
"HoldQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemCode",
|
||||
"label": "품목코드",
|
||||
"aliases": [
|
||||
"상품코드",
|
||||
"SKU",
|
||||
"ItemCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemId",
|
||||
"label": "품목ID",
|
||||
"aliases": [
|
||||
"ItemId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "item",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemName",
|
||||
"label": "품목명",
|
||||
"aliases": [
|
||||
"상품명",
|
||||
"ItemName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 300,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemSummary",
|
||||
"label": "대표상품",
|
||||
"aliases": [
|
||||
"ItemSummary"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationCode",
|
||||
"label": "로케이션",
|
||||
"aliases": [
|
||||
"Location",
|
||||
"LocationCode",
|
||||
"위치"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "location",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationId",
|
||||
"label": "로케이션ID",
|
||||
"aliases": [
|
||||
"LocationId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "location",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "lotNo",
|
||||
"label": "LOT",
|
||||
"aliases": [
|
||||
"LotNo",
|
||||
"LOT번호"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "occurredAt",
|
||||
"label": "발생시각",
|
||||
"aliases": [
|
||||
"OccurredAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "onHandQty",
|
||||
"label": "현재고",
|
||||
"aliases": [
|
||||
"OnHandQty",
|
||||
"장부재고"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderDate",
|
||||
"label": "주문일",
|
||||
"aliases": [
|
||||
"주문일자",
|
||||
"OrderDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"required": true,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderedAt",
|
||||
"label": "주문일시",
|
||||
"aliases": [
|
||||
"OrderedAt",
|
||||
"주문시간"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderId",
|
||||
"label": "주문ID",
|
||||
"aliases": [
|
||||
"OrderId"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderNo",
|
||||
"label": "주문번호",
|
||||
"aliases": [
|
||||
"OrderNo",
|
||||
"주문ID"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderQty",
|
||||
"label": "주문수량",
|
||||
"aliases": [
|
||||
"주문수량",
|
||||
"수량",
|
||||
"Qty",
|
||||
"OrderQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false,
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"key": "ownerName",
|
||||
"label": "담당자",
|
||||
"aliases": [
|
||||
"OwnerName",
|
||||
"담당"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 100,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "phone",
|
||||
"label": "연락처",
|
||||
"aliases": [
|
||||
"휴대폰",
|
||||
"전화번호",
|
||||
"Phone"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "phone"
|
||||
},
|
||||
{
|
||||
"key": "pickedQty",
|
||||
"label": "피킹수량",
|
||||
"aliases": [
|
||||
"PickedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "postalCode",
|
||||
"label": "우편번호",
|
||||
"aliases": [
|
||||
"ZipCode",
|
||||
"PostalCode"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 20,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "quantity",
|
||||
"label": "수량",
|
||||
"aliases": [
|
||||
"Qty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "receiverName",
|
||||
"label": "수취인",
|
||||
"aliases": [
|
||||
"받는분",
|
||||
"수령인",
|
||||
"ReceiverName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "name"
|
||||
},
|
||||
{
|
||||
"key": "referenceNo",
|
||||
"label": "참조번호",
|
||||
"aliases": [
|
||||
"ReferenceNo"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "remark",
|
||||
"label": "비고",
|
||||
"aliases": [
|
||||
"메모",
|
||||
"배송메모",
|
||||
"Remark"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "shippedQty",
|
||||
"label": "출고수량",
|
||||
"aliases": [
|
||||
"ShippedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "specification",
|
||||
"label": "규격",
|
||||
"aliases": [
|
||||
"Specification",
|
||||
"Spec"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "status",
|
||||
"label": "상태",
|
||||
"aliases": [
|
||||
"Status"
|
||||
],
|
||||
"dataType": "status",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "totalQty",
|
||||
"label": "총수량",
|
||||
"aliases": [
|
||||
"TotalQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "unitPrice",
|
||||
"label": "단가",
|
||||
"aliases": [
|
||||
"판매단가",
|
||||
"UnitPrice"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedAt",
|
||||
"label": "수정일시",
|
||||
"aliases": [
|
||||
"UpdatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedBy",
|
||||
"label": "수정자",
|
||||
"aliases": [
|
||||
"UpdatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "version",
|
||||
"label": "버전",
|
||||
"aliases": [
|
||||
"Version",
|
||||
"RowVersion"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseCode",
|
||||
"label": "창고코드",
|
||||
"aliases": [
|
||||
"창고",
|
||||
"창고코드",
|
||||
"출고창고",
|
||||
"WarehouseCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "warehouse",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseId",
|
||||
"label": "창고ID",
|
||||
"aliases": [
|
||||
"WarehouseId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "warehouse",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseName",
|
||||
"label": "창고명",
|
||||
"aliases": [
|
||||
"WarehouseName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"permissionVersion": "1.0.0",
|
||||
"permissions": [
|
||||
{
|
||||
"id": "common.ai.use",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "use",
|
||||
"risk": "medium",
|
||||
"description": "AI 설명·추천·초안 기능 사용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ai.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "AI 승인 제안의 실제 Command 실행 허용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.claim",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "claim",
|
||||
"risk": "medium",
|
||||
"description": "업무 예외를 내 처리건으로 지정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.create",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "대사 결과에서 운영 예외 생성",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.read",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 예외 센터 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.resolve",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "resolve",
|
||||
"risk": "high",
|
||||
"description": "수동 해결이 허용된 운영 예외 해결",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.retry",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "retry",
|
||||
"risk": "high",
|
||||
"description": "등록된 안전한 예외 Action 재처리",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.reconcile.read",
|
||||
"module": "COMMON",
|
||||
"resource": "reconcile",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 데이터 대사 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.runtime.read",
|
||||
"module": "COMMON",
|
||||
"resource": "runtime",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "런타임 상태·작업·알림 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.suggestion.create",
|
||||
"module": "COMMON",
|
||||
"resource": "suggestion",
|
||||
"action": "create",
|
||||
"risk": "low",
|
||||
"description": "현재 화면 사용자 제안 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "재고이동 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고이동 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.receive",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "receive",
|
||||
"risk": "high",
|
||||
"description": "이동재고 입고완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.ship",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "이동재고 출고",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.write",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "재고이동 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고현황 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.create",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "품목 신규·복사",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.read",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "품목 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.write",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "품목 수정·사용중지",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.cancel",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "cancel",
|
||||
"risk": "high",
|
||||
"description": "구매 취소",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "구매 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.read",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "구매 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.write",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "구매 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "imports.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "imports",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "Excel Import 생성·검증·반영",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "kbx.design.read",
|
||||
"module": "COMMON",
|
||||
"resource": "design-system",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX 내부 컴포넌트 카탈로그 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.approve",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "approve",
|
||||
"risk": "high",
|
||||
"description": "클레임 승인",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.hold",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "hold",
|
||||
"risk": "medium",
|
||||
"description": "클레임 보류",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.process",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "process",
|
||||
"risk": "high",
|
||||
"description": "클레임 처리 시작·완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.read",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "반품·클레임 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.create",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "주문 신규 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.import",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "import",
|
||||
"risk": "high",
|
||||
"description": "주문 Excel Import 실행",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.read",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "주문 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.ship",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "주문 출고지시",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.unmask",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-read",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 전체보기",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.export",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-export",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 비마스킹 Export",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.inventory.count",
|
||||
"module": "WMS",
|
||||
"resource": "inventory",
|
||||
"action": "count",
|
||||
"risk": "high",
|
||||
"description": "현장 재고실사 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.picking.execute",
|
||||
"module": "WMS",
|
||||
"resource": "picking",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "출고 피킹 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.putaway.execute",
|
||||
"module": "WMS",
|
||||
"resource": "putaway",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 적치 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.receiving.execute",
|
||||
"module": "WMS",
|
||||
"resource": "receiving",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 검수 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.execute",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "WMS 작업 시작",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.read",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "WMS 작업 Queue 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"sourceSha256": "5c06fd380f07e56e7e0188cce405dfaf2c1a2361a2d3526237c96e8a6802cd42",
|
||||
"types": [
|
||||
"validation",
|
||||
"business-rule",
|
||||
"conflict",
|
||||
"permission",
|
||||
"not-found",
|
||||
"integration",
|
||||
"system"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"policies": [
|
||||
{
|
||||
"id": "oms.order.recipient",
|
||||
"fields": [
|
||||
"receiverName",
|
||||
"phone",
|
||||
"postalCode",
|
||||
"address1",
|
||||
"address2"
|
||||
],
|
||||
"defaultExposure": "masked",
|
||||
"viewPermission": "oms.order.read",
|
||||
"revealPermission": "oms.order.recipient.unmask",
|
||||
"unmaskedExportPermission": "oms.order.recipient.export",
|
||||
"auditRequired": true,
|
||||
"aiExposure": "masked-only",
|
||||
"telemetryExposure": "never",
|
||||
"reasonRequired": false
|
||||
}
|
||||
],
|
||||
"ai": {
|
||||
"usePermission": "common.ai.use",
|
||||
"executePermission": "common.ai.execute",
|
||||
"executeRequiresProposalPermission": true,
|
||||
"defaultCapabilities": [
|
||||
"explain",
|
||||
"suggest",
|
||||
"draft"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"tokens": [
|
||||
{
|
||||
"path": "typography.fontFamily",
|
||||
"css": "--kbx-font-family",
|
||||
"type": "fontFamily",
|
||||
"role": "primitive",
|
||||
"value": "Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", Arial, sans-serif",
|
||||
"description": "업무 기본 Font Stack"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xs",
|
||||
"css": "--kbx-font-xs",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.sm",
|
||||
"css": "--kbx-font-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "13px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.md",
|
||||
"css": "--kbx-font-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "14px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.lg",
|
||||
"css": "--kbx-font-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xl",
|
||||
"css": "--kbx-font-xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "18px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.2xl",
|
||||
"css": "--kbx-font-2xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "color.white",
|
||||
"css": "--kbx-white",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#ffffff"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.25",
|
||||
"css": "--kbx-gray-25",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#fcfcfd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.50",
|
||||
"css": "--kbx-gray-50",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f9fafb"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.100",
|
||||
"css": "--kbx-gray-100",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f2f4f7"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.200",
|
||||
"css": "--kbx-gray-200",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#e4e7ec"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.300",
|
||||
"css": "--kbx-gray-300",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d0d5dd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.400",
|
||||
"css": "--kbx-gray-400",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#98a2b3"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.500",
|
||||
"css": "--kbx-gray-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#667085"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.700",
|
||||
"css": "--kbx-gray-700",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#344054"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.900",
|
||||
"css": "--kbx-gray-900",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#101828"
|
||||
},
|
||||
{
|
||||
"path": "color.blue.600",
|
||||
"css": "--kbx-blue-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#175cd3"
|
||||
},
|
||||
{
|
||||
"path": "color.green.600",
|
||||
"css": "--kbx-green-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#039855"
|
||||
},
|
||||
{
|
||||
"path": "color.orange.500",
|
||||
"css": "--kbx-orange-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f79009"
|
||||
},
|
||||
{
|
||||
"path": "color.red.600",
|
||||
"css": "--kbx-red-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d92d20"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.default",
|
||||
"css": "--kbx-color-surface",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.white}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.muted",
|
||||
"css": "--kbx-color-surface-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.50}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.subtle",
|
||||
"css": "--kbx-color-surface-subtle",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.100}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.hover",
|
||||
"css": "--kbx-color-surface-hover",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#f3f7fd"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.default",
|
||||
"css": "--kbx-color-text",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1d2939"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.muted",
|
||||
"css": "--kbx-color-text-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.default",
|
||||
"css": "--kbx-color-border",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.200}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.strong",
|
||||
"css": "--kbx-color-border-strong",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.400}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.action.primary",
|
||||
"css": "--kbx-color-primary",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.blue.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.success",
|
||||
"css": "--kbx-color-success",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.green.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.warning",
|
||||
"css": "--kbx-color-warning",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.orange.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.danger",
|
||||
"css": "--kbx-color-danger",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.red.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.focus",
|
||||
"css": "--kbx-color-focus",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1570ef"
|
||||
},
|
||||
{
|
||||
"path": "semantic.overlay",
|
||||
"css": "--kbx-color-overlay",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "rgba(16, 24, 40, .38)"
|
||||
},
|
||||
{
|
||||
"path": "spacing.0",
|
||||
"css": "--kbx-space-0",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"path": "spacing.1",
|
||||
"css": "--kbx-space-1",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.2",
|
||||
"css": "--kbx-space-2",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.3",
|
||||
"css": "--kbx-space-3",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.4",
|
||||
"css": "--kbx-space-4",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.5",
|
||||
"css": "--kbx-space-5",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.6",
|
||||
"css": "--kbx-space-6",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "24px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.8",
|
||||
"css": "--kbx-space-8",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "32px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.10",
|
||||
"css": "--kbx-space-10",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "40px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.12",
|
||||
"css": "--kbx-space-12",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "radius.sm",
|
||||
"css": "--kbx-radius-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "radius.md",
|
||||
"css": "--kbx-radius-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "6px"
|
||||
},
|
||||
{
|
||||
"path": "radius.lg",
|
||||
"css": "--kbx-radius-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "component.control.height",
|
||||
"css": "--kbx-control-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px",
|
||||
"description": "Desktop compact input/button baseline"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.rowHeight",
|
||||
"css": "--kbx-grid-row-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.headerHeight",
|
||||
"css": "--kbx-grid-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "36px"
|
||||
},
|
||||
{
|
||||
"path": "component.pageHeader.height",
|
||||
"css": "--kbx-page-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "component.commandBar.height",
|
||||
"css": "--kbx-command-bar-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "44px"
|
||||
},
|
||||
{
|
||||
"path": "component.form.labelWidth",
|
||||
"css": "--kbx-label-width",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "96px"
|
||||
},
|
||||
{
|
||||
"path": "component.touch.controlHeight",
|
||||
"css": "--kbx-control-touch",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "52px"
|
||||
}
|
||||
],
|
||||
"modes": {
|
||||
"compact": {
|
||||
"component.control.height": "34px",
|
||||
"component.grid.rowHeight": "34px",
|
||||
"component.grid.headerHeight": "36px"
|
||||
},
|
||||
"comfortable": {
|
||||
"component.control.height": "38px",
|
||||
"component.grid.rowHeight": "40px",
|
||||
"component.grid.headerHeight": "40px"
|
||||
},
|
||||
"touch": {
|
||||
"component.control.height": "52px",
|
||||
"component.grid.rowHeight": "52px",
|
||||
"component.grid.headerHeight": "48px"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# KBX v16 baseline
|
||||
|
||||
UX telemetry governance release의 generated contract snapshot입니다.
|
||||
@@ -0,0 +1,540 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"apiVersion": "1.1.0",
|
||||
"sourceSha256": "5d13beeaae82726288d15a690e93c85fa720177e5e60207e3810fe764e24650e",
|
||||
"operationCount": 48,
|
||||
"operations": [
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/ai/ask",
|
||||
"permission": "common.ai.use",
|
||||
"id": "common.ai.ask",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/commit",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.commit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.createSession",
|
||||
"kind": "upload",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"contentType": "multipart/form-data"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/errors.xlsx",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.errorWorkbook",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.getSession",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "PUT",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/mapping",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/saved-mappings",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveNamedMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/{importType}/template",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.template",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/validate",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.validate",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/claim",
|
||||
"permission": "common.operations.claim",
|
||||
"id": "common.operations.claim",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/resolve",
|
||||
"permission": "common.operations.resolve",
|
||||
"id": "common.operations.resolve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/{id:guid}/retry",
|
||||
"permission": "common.operations.retry",
|
||||
"id": "common.operations.retry",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/operations/work-items",
|
||||
"permission": "common.operations.read",
|
||||
"id": "common.operations.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/reconcile/items/create-exceptions",
|
||||
"permission": "common.operations.create",
|
||||
"id": "common.reconcile.createExceptions",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/reconcile/items",
|
||||
"permission": "common.reconcile.read",
|
||||
"id": "common.reconcile.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notice",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notice",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/runtime/notifications/{Id}/read",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notificationRead",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notifications",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notifications",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/operations",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.operations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/suggestions",
|
||||
"permission": "common.suggestion.create",
|
||||
"id": "common.suggestions.submit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory/{itemId}/locations",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.locations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items/{id}",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.get",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/approve",
|
||||
"permission": "oms.claim.approve",
|
||||
"id": "oms.claims.approve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/complete",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.complete",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/hold",
|
||||
"permission": "oms.claim.hold",
|
||||
"id": "oms.claims.hold",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/claims",
|
||||
"permission": "oms.claim.read",
|
||||
"id": "oms.claims.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/start",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/register",
|
||||
"permission": "oms.order.create",
|
||||
"id": "oms.orders.register",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/orders",
|
||||
"permission": "oms.order.read",
|
||||
"id": "oms.orders.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/ship",
|
||||
"permission": "oms.order.ship",
|
||||
"id": "oms.orders.ship",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.getTask",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/exceptions",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.reportException",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/scan",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.scan",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200,
|
||||
422
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/quantity",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.setQuantity",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/start",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/ux/events",
|
||||
"permission": "common.telemetry.write",
|
||||
"id": "common.uxTelemetry.ingest",
|
||||
"kind": "command",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/ux/metrics",
|
||||
"permission": "common.ux.read",
|
||||
"id": "common.uxTelemetry.metrics",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSearchPanel",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxPageHeader",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxFormSection",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxConfirm",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelMenu",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxJobProgress",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAuditTrail",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxHelpPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAiPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxProposalPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxListPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterDetailPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQueuePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxReconcilePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,374 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMaskedValue",
|
||||
"category": "business",
|
||||
"purpose": "민감정보의 기본 마스킹·권한 기반 전체보기 진입점을 표준화",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,695 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"source": "contracts/fields/kbx.fields.json",
|
||||
"sourceSha256": "9720246fe70ca49effd9e1e86fb580c624797cce68e71f35ad5e1b42f6263521",
|
||||
"count": 50,
|
||||
"fields": [
|
||||
{
|
||||
"key": "address1",
|
||||
"label": "주소",
|
||||
"aliases": [
|
||||
"기본주소",
|
||||
"배송주소",
|
||||
"Address1"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "address2",
|
||||
"label": "상세주소",
|
||||
"aliases": [
|
||||
"주소2",
|
||||
"Address2"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "allocatedQty",
|
||||
"label": "할당수량",
|
||||
"aliases": [
|
||||
"AllocatedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "amount",
|
||||
"label": "금액",
|
||||
"aliases": [
|
||||
"Amount",
|
||||
"주문금액"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 2,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "availableQty",
|
||||
"label": "가용재고",
|
||||
"aliases": [
|
||||
"AvailableQty",
|
||||
"출고가능수량"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "barcode",
|
||||
"label": "바코드",
|
||||
"aliases": [
|
||||
"Barcode",
|
||||
"EAN",
|
||||
"JAN"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelId",
|
||||
"label": "판매채널ID",
|
||||
"aliases": [
|
||||
"ChannelId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "salesChannel",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelName",
|
||||
"label": "판매채널",
|
||||
"aliases": [
|
||||
"ChannelName",
|
||||
"채널"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdAt",
|
||||
"label": "등록일시",
|
||||
"aliases": [
|
||||
"CreatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdBy",
|
||||
"label": "등록자",
|
||||
"aliases": [
|
||||
"CreatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerCode",
|
||||
"label": "거래처코드",
|
||||
"aliases": [
|
||||
"거래처",
|
||||
"업체코드",
|
||||
"CustomerCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "customer",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerId",
|
||||
"label": "거래처ID",
|
||||
"aliases": [
|
||||
"CustomerId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "customer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerName",
|
||||
"label": "거래처명",
|
||||
"aliases": [
|
||||
"CustomerName",
|
||||
"업체명"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "damagedQty",
|
||||
"label": "불량수량",
|
||||
"aliases": [
|
||||
"DamagedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "exceptionCount",
|
||||
"label": "예외건수",
|
||||
"aliases": [
|
||||
"ExceptionCount",
|
||||
"오류건수"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "expiryDate",
|
||||
"label": "유통기한",
|
||||
"aliases": [
|
||||
"ExpiryDate",
|
||||
"ExpirationDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "holdQty",
|
||||
"label": "보류수량",
|
||||
"aliases": [
|
||||
"HoldQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemCode",
|
||||
"label": "품목코드",
|
||||
"aliases": [
|
||||
"상품코드",
|
||||
"SKU",
|
||||
"ItemCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemId",
|
||||
"label": "품목ID",
|
||||
"aliases": [
|
||||
"ItemId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "item",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemName",
|
||||
"label": "품목명",
|
||||
"aliases": [
|
||||
"상품명",
|
||||
"ItemName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 300,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemSummary",
|
||||
"label": "대표상품",
|
||||
"aliases": [
|
||||
"ItemSummary"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationCode",
|
||||
"label": "로케이션",
|
||||
"aliases": [
|
||||
"Location",
|
||||
"LocationCode",
|
||||
"위치"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "location",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationId",
|
||||
"label": "로케이션ID",
|
||||
"aliases": [
|
||||
"LocationId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "location",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "lotNo",
|
||||
"label": "LOT",
|
||||
"aliases": [
|
||||
"LotNo",
|
||||
"LOT번호"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "occurredAt",
|
||||
"label": "발생시각",
|
||||
"aliases": [
|
||||
"OccurredAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "onHandQty",
|
||||
"label": "현재고",
|
||||
"aliases": [
|
||||
"OnHandQty",
|
||||
"장부재고"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderDate",
|
||||
"label": "주문일",
|
||||
"aliases": [
|
||||
"주문일자",
|
||||
"OrderDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"required": true,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderedAt",
|
||||
"label": "주문일시",
|
||||
"aliases": [
|
||||
"OrderedAt",
|
||||
"주문시간"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderId",
|
||||
"label": "주문ID",
|
||||
"aliases": [
|
||||
"OrderId"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderNo",
|
||||
"label": "주문번호",
|
||||
"aliases": [
|
||||
"OrderNo",
|
||||
"주문ID"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderQty",
|
||||
"label": "주문수량",
|
||||
"aliases": [
|
||||
"주문수량",
|
||||
"수량",
|
||||
"Qty",
|
||||
"OrderQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false,
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"key": "ownerName",
|
||||
"label": "담당자",
|
||||
"aliases": [
|
||||
"OwnerName",
|
||||
"담당"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 100,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "phone",
|
||||
"label": "연락처",
|
||||
"aliases": [
|
||||
"휴대폰",
|
||||
"전화번호",
|
||||
"Phone"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "phone"
|
||||
},
|
||||
{
|
||||
"key": "pickedQty",
|
||||
"label": "피킹수량",
|
||||
"aliases": [
|
||||
"PickedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "postalCode",
|
||||
"label": "우편번호",
|
||||
"aliases": [
|
||||
"ZipCode",
|
||||
"PostalCode"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 20,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "quantity",
|
||||
"label": "수량",
|
||||
"aliases": [
|
||||
"Qty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "receiverName",
|
||||
"label": "수취인",
|
||||
"aliases": [
|
||||
"받는분",
|
||||
"수령인",
|
||||
"ReceiverName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "name"
|
||||
},
|
||||
{
|
||||
"key": "referenceNo",
|
||||
"label": "참조번호",
|
||||
"aliases": [
|
||||
"ReferenceNo"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "remark",
|
||||
"label": "비고",
|
||||
"aliases": [
|
||||
"메모",
|
||||
"배송메모",
|
||||
"Remark"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "shippedQty",
|
||||
"label": "출고수량",
|
||||
"aliases": [
|
||||
"ShippedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "specification",
|
||||
"label": "규격",
|
||||
"aliases": [
|
||||
"Specification",
|
||||
"Spec"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "status",
|
||||
"label": "상태",
|
||||
"aliases": [
|
||||
"Status"
|
||||
],
|
||||
"dataType": "status",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "totalQty",
|
||||
"label": "총수량",
|
||||
"aliases": [
|
||||
"TotalQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "unitPrice",
|
||||
"label": "단가",
|
||||
"aliases": [
|
||||
"판매단가",
|
||||
"UnitPrice"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedAt",
|
||||
"label": "수정일시",
|
||||
"aliases": [
|
||||
"UpdatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedBy",
|
||||
"label": "수정자",
|
||||
"aliases": [
|
||||
"UpdatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "version",
|
||||
"label": "버전",
|
||||
"aliases": [
|
||||
"Version",
|
||||
"RowVersion"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseCode",
|
||||
"label": "창고코드",
|
||||
"aliases": [
|
||||
"창고",
|
||||
"창고코드",
|
||||
"출고창고",
|
||||
"WarehouseCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "warehouse",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseId",
|
||||
"label": "창고ID",
|
||||
"aliases": [
|
||||
"WarehouseId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "warehouse",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseName",
|
||||
"label": "창고명",
|
||||
"aliases": [
|
||||
"WarehouseName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-UX-001",
|
||||
"path": "/internal/kbx/ux-metrics",
|
||||
"section": "KBX",
|
||||
"order": 80
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,436 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"permissionVersion": "1.1.0",
|
||||
"permissions": [
|
||||
{
|
||||
"id": "common.ai.use",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "use",
|
||||
"risk": "medium",
|
||||
"description": "AI 설명·추천·초안 기능 사용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ai.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "AI 승인 제안의 실제 Command 실행 허용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.claim",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "claim",
|
||||
"risk": "medium",
|
||||
"description": "업무 예외를 내 처리건으로 지정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.create",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "대사 결과에서 운영 예외 생성",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.read",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 예외 센터 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.resolve",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "resolve",
|
||||
"risk": "high",
|
||||
"description": "수동 해결이 허용된 운영 예외 해결",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.retry",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "retry",
|
||||
"risk": "high",
|
||||
"description": "등록된 안전한 예외 Action 재처리",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.reconcile.read",
|
||||
"module": "COMMON",
|
||||
"resource": "reconcile",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 데이터 대사 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.runtime.read",
|
||||
"module": "COMMON",
|
||||
"resource": "runtime",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "런타임 상태·작업·알림 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.suggestion.create",
|
||||
"module": "COMMON",
|
||||
"resource": "suggestion",
|
||||
"action": "create",
|
||||
"risk": "low",
|
||||
"description": "현재 화면 사용자 제안 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "재고이동 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고이동 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.receive",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "receive",
|
||||
"risk": "high",
|
||||
"description": "이동재고 입고완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.ship",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "이동재고 출고",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.write",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "재고이동 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고현황 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.create",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "품목 신규·복사",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.read",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "품목 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.write",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "품목 수정·사용중지",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.cancel",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "cancel",
|
||||
"risk": "high",
|
||||
"description": "구매 취소",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "구매 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.read",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "구매 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.write",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "구매 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "imports.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "imports",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "Excel Import 생성·검증·반영",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "kbx.design.read",
|
||||
"module": "COMMON",
|
||||
"resource": "design-system",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX 내부 컴포넌트 카탈로그 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.approve",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "approve",
|
||||
"risk": "high",
|
||||
"description": "클레임 승인",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.hold",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "hold",
|
||||
"risk": "medium",
|
||||
"description": "클레임 보류",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.process",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "process",
|
||||
"risk": "high",
|
||||
"description": "클레임 처리 시작·완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.read",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "반품·클레임 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.create",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "주문 신규 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.import",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "import",
|
||||
"risk": "high",
|
||||
"description": "주문 Excel Import 실행",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.read",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "주문 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.ship",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "주문 출고지시",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.unmask",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-read",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 전체보기",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.export",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-export",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 비마스킹 Export",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.inventory.count",
|
||||
"module": "WMS",
|
||||
"resource": "inventory",
|
||||
"action": "count",
|
||||
"risk": "high",
|
||||
"description": "현장 재고실사 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.picking.execute",
|
||||
"module": "WMS",
|
||||
"resource": "picking",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "출고 피킹 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.putaway.execute",
|
||||
"module": "WMS",
|
||||
"resource": "putaway",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 적치 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.receiving.execute",
|
||||
"module": "WMS",
|
||||
"resource": "receiving",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 검수 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.execute",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "WMS 작업 시작",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.read",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "WMS 작업 Queue 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.telemetry.write",
|
||||
"module": "COMMON",
|
||||
"resource": "telemetry",
|
||||
"action": "write",
|
||||
"risk": "low",
|
||||
"description": "민감정보를 포함하지 않는 KBX 의미 단위 UX Telemetry 전송",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ux.read",
|
||||
"module": "COMMON",
|
||||
"resource": "ux-metrics",
|
||||
"action": "read",
|
||||
"risk": "medium",
|
||||
"description": "KBX UX 품질·자동화 지표 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"sourceSha256": "5c06fd380f07e56e7e0188cce405dfaf2c1a2361a2d3526237c96e8a6802cd42",
|
||||
"types": [
|
||||
"validation",
|
||||
"business-rule",
|
||||
"conflict",
|
||||
"permission",
|
||||
"not-found",
|
||||
"integration",
|
||||
"system"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-UX-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "UX 품질 지표",
|
||||
"helpKey": "COMMON-UX-001",
|
||||
"requiredPermissions": [
|
||||
"common.ux.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/ux-metrics/ux-metrics.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"policies": [
|
||||
{
|
||||
"id": "oms.order.recipient",
|
||||
"fields": [
|
||||
"receiverName",
|
||||
"phone",
|
||||
"postalCode",
|
||||
"address1",
|
||||
"address2"
|
||||
],
|
||||
"defaultExposure": "masked",
|
||||
"viewPermission": "oms.order.read",
|
||||
"revealPermission": "oms.order.recipient.unmask",
|
||||
"unmaskedExportPermission": "oms.order.recipient.export",
|
||||
"auditRequired": true,
|
||||
"aiExposure": "masked-only",
|
||||
"telemetryExposure": "never",
|
||||
"reasonRequired": false
|
||||
}
|
||||
],
|
||||
"ai": {
|
||||
"usePermission": "common.ai.use",
|
||||
"executePermission": "common.ai.execute",
|
||||
"executeRequiresProposalPermission": true,
|
||||
"defaultCapabilities": [
|
||||
"explain",
|
||||
"suggest",
|
||||
"draft"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,286 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"telemetryVersion": "1.0.0",
|
||||
"sourceSha256": "1289938f03a3c287d8d0a9dec722429815a4fe2d45b9a1e77f8f4b0b42b6aec7",
|
||||
"principles": {
|
||||
"purpose": "ux-improvement-and-operational-diagnosis",
|
||||
"noRawBusinessData": true,
|
||||
"noSensitiveData": true,
|
||||
"noDomClickSpying": true,
|
||||
"semanticEventsOnly": true,
|
||||
"rawRetentionDays": 90,
|
||||
"dailyAggregateRetentionMonths": 13
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"name": "screen.open",
|
||||
"category": "navigation",
|
||||
"description": "화면 진입",
|
||||
"allowedAttributes": [
|
||||
"module",
|
||||
"launchMode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "screen.close",
|
||||
"category": "navigation",
|
||||
"description": "화면 종료",
|
||||
"allowedAttributes": [
|
||||
"module",
|
||||
"closeReason"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "task.start",
|
||||
"category": "task",
|
||||
"description": "측정 가능한 업무 Task 시작",
|
||||
"allowedAttributes": [
|
||||
"taskType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "task.complete",
|
||||
"category": "task",
|
||||
"description": "업무 Task 정상 완료",
|
||||
"allowedAttributes": [
|
||||
"taskType",
|
||||
"result"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "task.abandon",
|
||||
"category": "task",
|
||||
"description": "업무 Task 중단",
|
||||
"allowedAttributes": [
|
||||
"taskType",
|
||||
"reasonCode"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "interaction.execute",
|
||||
"category": "interaction",
|
||||
"description": "KBX 의미 단위 업무 조작 실행",
|
||||
"allowedAttributes": [
|
||||
"interactionType",
|
||||
"commandId"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "search.execute",
|
||||
"category": "interaction",
|
||||
"description": "조회 실행",
|
||||
"allowedAttributes": [
|
||||
"resultBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command.execute",
|
||||
"category": "command",
|
||||
"description": "업무 Command 실행 시도",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"operationKind"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command.succeeded",
|
||||
"category": "command",
|
||||
"description": "업무 Command 성공",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"operationKind"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "command.failed",
|
||||
"category": "command",
|
||||
"description": "업무 Command 실패",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"problemType",
|
||||
"reasonCode"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "lookup.open",
|
||||
"category": "lookup",
|
||||
"description": "Lookup 열기",
|
||||
"allowedAttributes": [
|
||||
"entityType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "lookup.select",
|
||||
"category": "lookup",
|
||||
"description": "Lookup 선택 완료",
|
||||
"allowedAttributes": [
|
||||
"entityType",
|
||||
"selectionSource"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "grid.bulk_action",
|
||||
"category": "interaction",
|
||||
"description": "Grid 일괄처리 실행",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"countBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "validation.failed",
|
||||
"category": "quality",
|
||||
"description": "저장/업무 실행 전후 검증 실패",
|
||||
"allowedAttributes": [
|
||||
"stage",
|
||||
"errorCountBucket",
|
||||
"reasonCode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "excel.import.start",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 시작",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"rowCountBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "excel.import.completed",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 완료",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"result",
|
||||
"rowCountBucket"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "excel.import.failed",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 실패",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"reasonCode",
|
||||
"rowCountBucket"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "exception.open",
|
||||
"category": "exception",
|
||||
"description": "업무 예외 생성/노출",
|
||||
"allowedAttributes": [
|
||||
"exceptionType",
|
||||
"severity"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "exception.resolved",
|
||||
"category": "exception",
|
||||
"description": "업무 예외 해결",
|
||||
"allowedAttributes": [
|
||||
"exceptionType",
|
||||
"resolutionType"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.open",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 확인",
|
||||
"allowedAttributes": [
|
||||
"proposalType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.accept",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 승인",
|
||||
"allowedAttributes": [
|
||||
"proposalType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.reject",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 거절",
|
||||
"allowedAttributes": [
|
||||
"proposalType",
|
||||
"reasonCode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "manual.intervention",
|
||||
"category": "outcome",
|
||||
"description": "정상 자동처리 대신 사람의 확인/수정/판단이 필요했던 업무",
|
||||
"allowedAttributes": [
|
||||
"workType",
|
||||
"reasonCode",
|
||||
"exceptionType"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metrics": [
|
||||
{
|
||||
"key": "task_completion_time_ms",
|
||||
"label": "Task Completion Time",
|
||||
"numerator": "task.complete.duration_ms",
|
||||
"aggregation": "p50,p95",
|
||||
"unit": "ms"
|
||||
},
|
||||
{
|
||||
"key": "semantic_interactions_per_task",
|
||||
"label": "Interactions / Task",
|
||||
"numerator": "interaction.execute",
|
||||
"denominator": "task.complete",
|
||||
"aggregation": "ratio",
|
||||
"unit": "count"
|
||||
},
|
||||
{
|
||||
"key": "manual_intervention_rate",
|
||||
"label": "Manual Intervention Rate",
|
||||
"numerator": "ux_business_outcomes.manual_intervention_count",
|
||||
"denominator": "ux_business_outcomes.observed_count",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "validation_failure_rate",
|
||||
"label": "Validation Failure Rate",
|
||||
"numerator": "validation.failed",
|
||||
"denominator": "command.execute",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "import_failure_rate",
|
||||
"label": "Import Failure Rate",
|
||||
"numerator": "excel.import.failed",
|
||||
"denominator": "excel.import.start",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "exception_resolution_time_ms",
|
||||
"label": "Exception Resolution Time",
|
||||
"numerator": "exception.resolved.duration_ms",
|
||||
"aggregation": "p50,p95",
|
||||
"unit": "ms"
|
||||
},
|
||||
{
|
||||
"key": "ai_proposal_acceptance_rate",
|
||||
"label": "AI Proposal Acceptance Rate",
|
||||
"numerator": "ai.proposal.accept",
|
||||
"denominator": "ai.proposal.open",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"tokens": [
|
||||
{
|
||||
"path": "typography.fontFamily",
|
||||
"css": "--kbx-font-family",
|
||||
"type": "fontFamily",
|
||||
"role": "primitive",
|
||||
"value": "Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", Arial, sans-serif",
|
||||
"description": "업무 기본 Font Stack"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xs",
|
||||
"css": "--kbx-font-xs",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.sm",
|
||||
"css": "--kbx-font-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "13px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.md",
|
||||
"css": "--kbx-font-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "14px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.lg",
|
||||
"css": "--kbx-font-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xl",
|
||||
"css": "--kbx-font-xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "18px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.2xl",
|
||||
"css": "--kbx-font-2xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "color.white",
|
||||
"css": "--kbx-white",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#ffffff"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.25",
|
||||
"css": "--kbx-gray-25",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#fcfcfd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.50",
|
||||
"css": "--kbx-gray-50",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f9fafb"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.100",
|
||||
"css": "--kbx-gray-100",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f2f4f7"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.200",
|
||||
"css": "--kbx-gray-200",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#e4e7ec"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.300",
|
||||
"css": "--kbx-gray-300",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d0d5dd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.400",
|
||||
"css": "--kbx-gray-400",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#98a2b3"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.500",
|
||||
"css": "--kbx-gray-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#667085"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.700",
|
||||
"css": "--kbx-gray-700",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#344054"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.900",
|
||||
"css": "--kbx-gray-900",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#101828"
|
||||
},
|
||||
{
|
||||
"path": "color.blue.600",
|
||||
"css": "--kbx-blue-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#175cd3"
|
||||
},
|
||||
{
|
||||
"path": "color.green.600",
|
||||
"css": "--kbx-green-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#039855"
|
||||
},
|
||||
{
|
||||
"path": "color.orange.500",
|
||||
"css": "--kbx-orange-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f79009"
|
||||
},
|
||||
{
|
||||
"path": "color.red.600",
|
||||
"css": "--kbx-red-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d92d20"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.default",
|
||||
"css": "--kbx-color-surface",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.white}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.muted",
|
||||
"css": "--kbx-color-surface-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.50}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.subtle",
|
||||
"css": "--kbx-color-surface-subtle",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.100}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.hover",
|
||||
"css": "--kbx-color-surface-hover",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#f3f7fd"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.default",
|
||||
"css": "--kbx-color-text",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1d2939"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.muted",
|
||||
"css": "--kbx-color-text-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.default",
|
||||
"css": "--kbx-color-border",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.200}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.strong",
|
||||
"css": "--kbx-color-border-strong",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.400}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.action.primary",
|
||||
"css": "--kbx-color-primary",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.blue.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.success",
|
||||
"css": "--kbx-color-success",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.green.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.warning",
|
||||
"css": "--kbx-color-warning",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.orange.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.danger",
|
||||
"css": "--kbx-color-danger",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.red.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.focus",
|
||||
"css": "--kbx-color-focus",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1570ef"
|
||||
},
|
||||
{
|
||||
"path": "semantic.overlay",
|
||||
"css": "--kbx-color-overlay",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "rgba(16, 24, 40, .38)"
|
||||
},
|
||||
{
|
||||
"path": "spacing.0",
|
||||
"css": "--kbx-space-0",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"path": "spacing.1",
|
||||
"css": "--kbx-space-1",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.2",
|
||||
"css": "--kbx-space-2",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.3",
|
||||
"css": "--kbx-space-3",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.4",
|
||||
"css": "--kbx-space-4",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.5",
|
||||
"css": "--kbx-space-5",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.6",
|
||||
"css": "--kbx-space-6",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "24px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.8",
|
||||
"css": "--kbx-space-8",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "32px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.10",
|
||||
"css": "--kbx-space-10",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "40px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.12",
|
||||
"css": "--kbx-space-12",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "radius.sm",
|
||||
"css": "--kbx-radius-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "radius.md",
|
||||
"css": "--kbx-radius-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "6px"
|
||||
},
|
||||
{
|
||||
"path": "radius.lg",
|
||||
"css": "--kbx-radius-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "component.control.height",
|
||||
"css": "--kbx-control-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px",
|
||||
"description": "Desktop compact input/button baseline"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.rowHeight",
|
||||
"css": "--kbx-grid-row-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.headerHeight",
|
||||
"css": "--kbx-grid-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "36px"
|
||||
},
|
||||
{
|
||||
"path": "component.pageHeader.height",
|
||||
"css": "--kbx-page-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "component.commandBar.height",
|
||||
"css": "--kbx-command-bar-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "44px"
|
||||
},
|
||||
{
|
||||
"path": "component.form.labelWidth",
|
||||
"css": "--kbx-label-width",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "96px"
|
||||
},
|
||||
{
|
||||
"path": "component.touch.controlHeight",
|
||||
"css": "--kbx-control-touch",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "52px"
|
||||
}
|
||||
],
|
||||
"modes": {
|
||||
"compact": {
|
||||
"component.control.height": "34px",
|
||||
"component.grid.rowHeight": "34px",
|
||||
"component.grid.headerHeight": "36px"
|
||||
},
|
||||
"comfortable": {
|
||||
"component.control.height": "38px",
|
||||
"component.grid.rowHeight": "40px",
|
||||
"component.grid.headerHeight": "40px"
|
||||
},
|
||||
"touch": {
|
||||
"component.control.height": "52px",
|
||||
"component.grid.rowHeight": "52px",
|
||||
"component.grid.headerHeight": "48px"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# v17 baseline
|
||||
|
||||
Runtime public contract baseline copied from the v17 generated artifacts. Test scenario/fixture manifests are intentionally empty because executable scenario governance is introduced in v18.
|
||||
@@ -0,0 +1,584 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"apiVersion": "1.5.0",
|
||||
"sourceSha256": "c07792e991247a14ac521f4e0b77c7ddf7a6784a0ad179eef2a87a5a73f1bdc8",
|
||||
"operationCount": 52,
|
||||
"operations": [
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/ai/ask",
|
||||
"permission": "common.ai.use",
|
||||
"id": "common.ai.ask",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/commit",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.commit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.createSession",
|
||||
"kind": "upload",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"contentType": "multipart/form-data"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/errors.xlsx",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.errorWorkbook",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.getSession",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "PUT",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/mapping",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/saved-mappings",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveNamedMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/{importType}/template",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.template",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/validate",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.validate",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/claim",
|
||||
"permission": "common.operations.claim",
|
||||
"id": "common.operations.claim",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/resolve",
|
||||
"permission": "common.operations.resolve",
|
||||
"id": "common.operations.resolve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/{id:guid}/retry",
|
||||
"permission": "common.operations.retry",
|
||||
"id": "common.operations.retry",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/operations/work-items",
|
||||
"permission": "common.operations.read",
|
||||
"id": "common.operations.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/reconcile/items/create-exceptions",
|
||||
"permission": "common.operations.create",
|
||||
"id": "common.reconcile.createExceptions",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/reconcile/items",
|
||||
"permission": "common.reconcile.read",
|
||||
"id": "common.reconcile.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notice",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notice",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/runtime/notifications/{Id}/read",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notificationRead",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notifications",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notifications",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/operations",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.operations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/suggestions",
|
||||
"permission": "common.suggestion.create",
|
||||
"id": "common.suggestions.submit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory/{itemId}/locations",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.locations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items/{id}",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.get",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/approve",
|
||||
"permission": "oms.claim.approve",
|
||||
"id": "oms.claims.approve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/complete",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.complete",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/hold",
|
||||
"permission": "oms.claim.hold",
|
||||
"id": "oms.claims.hold",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/claims",
|
||||
"permission": "oms.claim.read",
|
||||
"id": "oms.claims.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/start",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/register",
|
||||
"permission": "oms.order.create",
|
||||
"id": "oms.orders.register",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/orders",
|
||||
"permission": "oms.order.read",
|
||||
"id": "oms.orders.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/ship",
|
||||
"permission": "oms.order.ship",
|
||||
"id": "oms.orders.ship",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.getTask",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/exceptions",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.reportException",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/scan",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.scan",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200,
|
||||
422
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/quantity",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.setQuantity",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/start",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/ux/events",
|
||||
"permission": "common.telemetry.write",
|
||||
"id": "common.uxTelemetry.ingest",
|
||||
"kind": "command",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/ux/metrics",
|
||||
"permission": "common.ux.read",
|
||||
"id": "common.uxTelemetry.metrics",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/experiments/assignments",
|
||||
"permission": "common.experiment.evaluate",
|
||||
"id": "common.experiments.assignments",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/experiments",
|
||||
"permission": "common.experiment.read",
|
||||
"id": "common.experiments.overview",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/experiments/{experimentId}/rollout",
|
||||
"permission": "common.experiment.manage",
|
||||
"id": "common.experiments.rollout",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/experiments/{experimentId}/rollback",
|
||||
"permission": "common.experiment.manage",
|
||||
"id": "common.experiments.rollback",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSearchPanel",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxPageHeader",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxFormSection",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxConfirm",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelMenu",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxJobProgress",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAuditTrail",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxHelpPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAiPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxProposalPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxListPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterDetailPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQueuePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxReconcilePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,374 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMaskedValue",
|
||||
"category": "business",
|
||||
"purpose": "민감정보의 기본 마스킹·권한 기반 전체보기 진입점을 표준화",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"experimentVersion": "1.0.0",
|
||||
"sourceSha256": "2510a2927bab297858e09e75c8af9bb766d91b92cc0daf99433f6377d399fbf9",
|
||||
"principles": {
|
||||
"purpose": "controlled-ux-rollout-and-measurement",
|
||||
"serverAuthoritative": true,
|
||||
"stableAssignment": true,
|
||||
"exposureAfterRender": true,
|
||||
"killSwitchRequired": true,
|
||||
"maxRunningExperimentsPerScreen": 1,
|
||||
"safeUxOnly": true,
|
||||
"automaticRollbackOnGuardrailBreach": true,
|
||||
"statisticalClaim": "operational-threshold-only; do not claim statistical significance",
|
||||
"allowedSurfaces": [
|
||||
"layout",
|
||||
"information-emphasis",
|
||||
"default-filter",
|
||||
"navigation",
|
||||
"copy"
|
||||
],
|
||||
"prohibitedScopes": [
|
||||
"permission",
|
||||
"sensitive-data",
|
||||
"domain-rule",
|
||||
"validation",
|
||||
"idempotency",
|
||||
"workflow-safety",
|
||||
"wms-scan-rule",
|
||||
"inventory-truth"
|
||||
]
|
||||
},
|
||||
"featureFlags": [
|
||||
{
|
||||
"id": "oms.order-list.exception-summary-v2",
|
||||
"screenId": "OMS-ORD-001",
|
||||
"surface": "information-emphasis",
|
||||
"description": "기존 주문 Quick Filter를 이동시키지 않고 확인 필요 예외 요약을 보조적으로 노출하는 되돌릴 수 있는 UX 변경",
|
||||
"defaultVariant": "control",
|
||||
"killSwitch": true,
|
||||
"owner": "KBX"
|
||||
}
|
||||
],
|
||||
"experiments": [
|
||||
{
|
||||
"id": "exp.oms.order-list.exception-summary-v2",
|
||||
"flagId": "oms.order-list.exception-summary-v2",
|
||||
"screenId": "OMS-ORD-001",
|
||||
"state": "draft",
|
||||
"rolloutPercent": 0,
|
||||
"minExposurePerVariant": 200,
|
||||
"variants": [
|
||||
{
|
||||
"key": "control",
|
||||
"weight": 50
|
||||
},
|
||||
{
|
||||
"key": "exception-summary",
|
||||
"weight": 50
|
||||
}
|
||||
],
|
||||
"primaryMetric": {
|
||||
"key": "semantic_interactions_per_task",
|
||||
"direction": "lower",
|
||||
"minimumImprovementPercent": 10
|
||||
},
|
||||
"guardrails": [
|
||||
{
|
||||
"key": "task_completion_time_ms",
|
||||
"statistic": "p95",
|
||||
"maxRegressionPercent": 20
|
||||
},
|
||||
{
|
||||
"key": "validation_failure_rate",
|
||||
"statistic": "rate",
|
||||
"maxAbsoluteRegressionPercentagePoints": 2
|
||||
}
|
||||
],
|
||||
"globalGuardrails": [
|
||||
{
|
||||
"key": "manual_intervention_rate",
|
||||
"maxAbsoluteRegressionPercentagePoints": 0.5
|
||||
}
|
||||
],
|
||||
"notes": "Reference experiment only. v17 ships at draft/0%; rollout requires an explicit runtime decision and can be killed immediately."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,695 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"source": "contracts/fields/kbx.fields.json",
|
||||
"sourceSha256": "9720246fe70ca49effd9e1e86fb580c624797cce68e71f35ad5e1b42f6263521",
|
||||
"count": 50,
|
||||
"fields": [
|
||||
{
|
||||
"key": "address1",
|
||||
"label": "주소",
|
||||
"aliases": [
|
||||
"기본주소",
|
||||
"배송주소",
|
||||
"Address1"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "address2",
|
||||
"label": "상세주소",
|
||||
"aliases": [
|
||||
"주소2",
|
||||
"Address2"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "allocatedQty",
|
||||
"label": "할당수량",
|
||||
"aliases": [
|
||||
"AllocatedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "amount",
|
||||
"label": "금액",
|
||||
"aliases": [
|
||||
"Amount",
|
||||
"주문금액"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 2,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "availableQty",
|
||||
"label": "가용재고",
|
||||
"aliases": [
|
||||
"AvailableQty",
|
||||
"출고가능수량"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "barcode",
|
||||
"label": "바코드",
|
||||
"aliases": [
|
||||
"Barcode",
|
||||
"EAN",
|
||||
"JAN"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelId",
|
||||
"label": "판매채널ID",
|
||||
"aliases": [
|
||||
"ChannelId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "salesChannel",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelName",
|
||||
"label": "판매채널",
|
||||
"aliases": [
|
||||
"ChannelName",
|
||||
"채널"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdAt",
|
||||
"label": "등록일시",
|
||||
"aliases": [
|
||||
"CreatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdBy",
|
||||
"label": "등록자",
|
||||
"aliases": [
|
||||
"CreatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerCode",
|
||||
"label": "거래처코드",
|
||||
"aliases": [
|
||||
"거래처",
|
||||
"업체코드",
|
||||
"CustomerCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "customer",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerId",
|
||||
"label": "거래처ID",
|
||||
"aliases": [
|
||||
"CustomerId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "customer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerName",
|
||||
"label": "거래처명",
|
||||
"aliases": [
|
||||
"CustomerName",
|
||||
"업체명"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "damagedQty",
|
||||
"label": "불량수량",
|
||||
"aliases": [
|
||||
"DamagedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "exceptionCount",
|
||||
"label": "예외건수",
|
||||
"aliases": [
|
||||
"ExceptionCount",
|
||||
"오류건수"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "expiryDate",
|
||||
"label": "유통기한",
|
||||
"aliases": [
|
||||
"ExpiryDate",
|
||||
"ExpirationDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "holdQty",
|
||||
"label": "보류수량",
|
||||
"aliases": [
|
||||
"HoldQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemCode",
|
||||
"label": "품목코드",
|
||||
"aliases": [
|
||||
"상품코드",
|
||||
"SKU",
|
||||
"ItemCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemId",
|
||||
"label": "품목ID",
|
||||
"aliases": [
|
||||
"ItemId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "item",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemName",
|
||||
"label": "품목명",
|
||||
"aliases": [
|
||||
"상품명",
|
||||
"ItemName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 300,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemSummary",
|
||||
"label": "대표상품",
|
||||
"aliases": [
|
||||
"ItemSummary"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationCode",
|
||||
"label": "로케이션",
|
||||
"aliases": [
|
||||
"Location",
|
||||
"LocationCode",
|
||||
"위치"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "location",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationId",
|
||||
"label": "로케이션ID",
|
||||
"aliases": [
|
||||
"LocationId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "location",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "lotNo",
|
||||
"label": "LOT",
|
||||
"aliases": [
|
||||
"LotNo",
|
||||
"LOT번호"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "occurredAt",
|
||||
"label": "발생시각",
|
||||
"aliases": [
|
||||
"OccurredAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "onHandQty",
|
||||
"label": "현재고",
|
||||
"aliases": [
|
||||
"OnHandQty",
|
||||
"장부재고"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderDate",
|
||||
"label": "주문일",
|
||||
"aliases": [
|
||||
"주문일자",
|
||||
"OrderDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"required": true,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderedAt",
|
||||
"label": "주문일시",
|
||||
"aliases": [
|
||||
"OrderedAt",
|
||||
"주문시간"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderId",
|
||||
"label": "주문ID",
|
||||
"aliases": [
|
||||
"OrderId"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderNo",
|
||||
"label": "주문번호",
|
||||
"aliases": [
|
||||
"OrderNo",
|
||||
"주문ID"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderQty",
|
||||
"label": "주문수량",
|
||||
"aliases": [
|
||||
"주문수량",
|
||||
"수량",
|
||||
"Qty",
|
||||
"OrderQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false,
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"key": "ownerName",
|
||||
"label": "담당자",
|
||||
"aliases": [
|
||||
"OwnerName",
|
||||
"담당"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 100,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "phone",
|
||||
"label": "연락처",
|
||||
"aliases": [
|
||||
"휴대폰",
|
||||
"전화번호",
|
||||
"Phone"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "phone"
|
||||
},
|
||||
{
|
||||
"key": "pickedQty",
|
||||
"label": "피킹수량",
|
||||
"aliases": [
|
||||
"PickedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "postalCode",
|
||||
"label": "우편번호",
|
||||
"aliases": [
|
||||
"ZipCode",
|
||||
"PostalCode"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 20,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "quantity",
|
||||
"label": "수량",
|
||||
"aliases": [
|
||||
"Qty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "receiverName",
|
||||
"label": "수취인",
|
||||
"aliases": [
|
||||
"받는분",
|
||||
"수령인",
|
||||
"ReceiverName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "name"
|
||||
},
|
||||
{
|
||||
"key": "referenceNo",
|
||||
"label": "참조번호",
|
||||
"aliases": [
|
||||
"ReferenceNo"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "remark",
|
||||
"label": "비고",
|
||||
"aliases": [
|
||||
"메모",
|
||||
"배송메모",
|
||||
"Remark"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "shippedQty",
|
||||
"label": "출고수량",
|
||||
"aliases": [
|
||||
"ShippedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "specification",
|
||||
"label": "규격",
|
||||
"aliases": [
|
||||
"Specification",
|
||||
"Spec"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "status",
|
||||
"label": "상태",
|
||||
"aliases": [
|
||||
"Status"
|
||||
],
|
||||
"dataType": "status",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "totalQty",
|
||||
"label": "총수량",
|
||||
"aliases": [
|
||||
"TotalQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "unitPrice",
|
||||
"label": "단가",
|
||||
"aliases": [
|
||||
"판매단가",
|
||||
"UnitPrice"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedAt",
|
||||
"label": "수정일시",
|
||||
"aliases": [
|
||||
"UpdatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedBy",
|
||||
"label": "수정자",
|
||||
"aliases": [
|
||||
"UpdatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "version",
|
||||
"label": "버전",
|
||||
"aliases": [
|
||||
"Version",
|
||||
"RowVersion"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseCode",
|
||||
"label": "창고코드",
|
||||
"aliases": [
|
||||
"창고",
|
||||
"창고코드",
|
||||
"출고창고",
|
||||
"WarehouseCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "warehouse",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseId",
|
||||
"label": "창고ID",
|
||||
"aliases": [
|
||||
"WarehouseId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "warehouse",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseName",
|
||||
"label": "창고명",
|
||||
"aliases": [
|
||||
"WarehouseName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-EXP-001",
|
||||
"path": "/internal/kbx/experiments",
|
||||
"section": "KBX",
|
||||
"order": 75
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-UX-001",
|
||||
"path": "/internal/kbx/ux-metrics",
|
||||
"section": "KBX",
|
||||
"order": 80
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,466 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"permissionVersion": "1.2.0",
|
||||
"permissions": [
|
||||
{
|
||||
"id": "common.ai.use",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "use",
|
||||
"risk": "medium",
|
||||
"description": "AI 설명·추천·초안 기능 사용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ai.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "AI 승인 제안의 실제 Command 실행 허용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.claim",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "claim",
|
||||
"risk": "medium",
|
||||
"description": "업무 예외를 내 처리건으로 지정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.create",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "대사 결과에서 운영 예외 생성",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.read",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 예외 센터 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.resolve",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "resolve",
|
||||
"risk": "high",
|
||||
"description": "수동 해결이 허용된 운영 예외 해결",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.retry",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "retry",
|
||||
"risk": "high",
|
||||
"description": "등록된 안전한 예외 Action 재처리",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.reconcile.read",
|
||||
"module": "COMMON",
|
||||
"resource": "reconcile",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 데이터 대사 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.runtime.read",
|
||||
"module": "COMMON",
|
||||
"resource": "runtime",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "런타임 상태·작업·알림 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.suggestion.create",
|
||||
"module": "COMMON",
|
||||
"resource": "suggestion",
|
||||
"action": "create",
|
||||
"risk": "low",
|
||||
"description": "현재 화면 사용자 제안 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "재고이동 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고이동 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.receive",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "receive",
|
||||
"risk": "high",
|
||||
"description": "이동재고 입고완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.ship",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "이동재고 출고",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.write",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "재고이동 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고현황 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.create",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "품목 신규·복사",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.read",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "품목 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.write",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "품목 수정·사용중지",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.cancel",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "cancel",
|
||||
"risk": "high",
|
||||
"description": "구매 취소",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "구매 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.read",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "구매 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.write",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "구매 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "imports.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "imports",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "Excel Import 생성·검증·반영",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "kbx.design.read",
|
||||
"module": "COMMON",
|
||||
"resource": "design-system",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX 내부 컴포넌트 카탈로그 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.approve",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "approve",
|
||||
"risk": "high",
|
||||
"description": "클레임 승인",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.hold",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "hold",
|
||||
"risk": "medium",
|
||||
"description": "클레임 보류",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.process",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "process",
|
||||
"risk": "high",
|
||||
"description": "클레임 처리 시작·완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.read",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "반품·클레임 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.create",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "주문 신규 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.import",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "import",
|
||||
"risk": "high",
|
||||
"description": "주문 Excel Import 실행",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.read",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "주문 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.ship",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "주문 출고지시",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.unmask",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-read",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 전체보기",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.export",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-export",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 비마스킹 Export",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.inventory.count",
|
||||
"module": "WMS",
|
||||
"resource": "inventory",
|
||||
"action": "count",
|
||||
"risk": "high",
|
||||
"description": "현장 재고실사 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.picking.execute",
|
||||
"module": "WMS",
|
||||
"resource": "picking",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "출고 피킹 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.putaway.execute",
|
||||
"module": "WMS",
|
||||
"resource": "putaway",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 적치 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.receiving.execute",
|
||||
"module": "WMS",
|
||||
"resource": "receiving",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 검수 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.execute",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "WMS 작업 시작",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.read",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "WMS 작업 Queue 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.telemetry.write",
|
||||
"module": "COMMON",
|
||||
"resource": "telemetry",
|
||||
"action": "write",
|
||||
"risk": "low",
|
||||
"description": "민감정보를 포함하지 않는 KBX 의미 단위 UX Telemetry 전송",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ux.read",
|
||||
"module": "COMMON",
|
||||
"resource": "ux-metrics",
|
||||
"action": "read",
|
||||
"risk": "medium",
|
||||
"description": "KBX UX 품질·자동화 지표 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.evaluate",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "evaluate",
|
||||
"risk": "low",
|
||||
"description": "현재 사용자에 대한 안전한 UX 실험 Variant 평가",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.read",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX UX 실험·점진배포 상태 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.manage",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "manage",
|
||||
"risk": "high",
|
||||
"description": "UX 실험 점진배포 비율 변경·일시중지·즉시 롤백",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"sourceSha256": "5c06fd380f07e56e7e0188cce405dfaf2c1a2361a2d3526237c96e8a6802cd42",
|
||||
"types": [
|
||||
"validation",
|
||||
"business-rule",
|
||||
"conflict",
|
||||
"permission",
|
||||
"not-found",
|
||||
"integration",
|
||||
"system"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-EXP-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "UX 실험·점진배포",
|
||||
"helpKey": "COMMON-EXP-001",
|
||||
"requiredPermissions": [
|
||||
"common.experiment.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/experiments/experiments.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-UX-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "UX 품질 지표",
|
||||
"helpKey": "COMMON-UX-001",
|
||||
"requiredPermissions": [
|
||||
"common.ux.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/ux-metrics/ux-metrics.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"policies": [
|
||||
{
|
||||
"id": "oms.order.recipient",
|
||||
"fields": [
|
||||
"receiverName",
|
||||
"phone",
|
||||
"postalCode",
|
||||
"address1",
|
||||
"address2"
|
||||
],
|
||||
"defaultExposure": "masked",
|
||||
"viewPermission": "oms.order.read",
|
||||
"revealPermission": "oms.order.recipient.unmask",
|
||||
"unmaskedExportPermission": "oms.order.recipient.export",
|
||||
"auditRequired": true,
|
||||
"aiExposure": "masked-only",
|
||||
"telemetryExposure": "never",
|
||||
"reasonRequired": false
|
||||
}
|
||||
],
|
||||
"ai": {
|
||||
"usePermission": "common.ai.use",
|
||||
"executePermission": "common.ai.execute",
|
||||
"executeRequiresProposalPermission": true,
|
||||
"defaultCapabilities": [
|
||||
"explain",
|
||||
"suggest",
|
||||
"draft"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,294 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"telemetryVersion": "1.1.0",
|
||||
"sourceSha256": "9f5de69498b657cb0d60df18c1e98c504a44eec555c4fc50d46f15f83a4ea1ce",
|
||||
"principles": {
|
||||
"purpose": "ux-improvement-and-operational-diagnosis",
|
||||
"noRawBusinessData": true,
|
||||
"noSensitiveData": true,
|
||||
"noDomClickSpying": true,
|
||||
"semanticEventsOnly": true,
|
||||
"rawRetentionDays": 90,
|
||||
"dailyAggregateRetentionMonths": 13
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"name": "screen.open",
|
||||
"category": "navigation",
|
||||
"description": "화면 진입",
|
||||
"allowedAttributes": [
|
||||
"module",
|
||||
"launchMode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "screen.close",
|
||||
"category": "navigation",
|
||||
"description": "화면 종료",
|
||||
"allowedAttributes": [
|
||||
"module",
|
||||
"closeReason"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "task.start",
|
||||
"category": "task",
|
||||
"description": "측정 가능한 업무 Task 시작",
|
||||
"allowedAttributes": [
|
||||
"taskType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "task.complete",
|
||||
"category": "task",
|
||||
"description": "업무 Task 정상 완료",
|
||||
"allowedAttributes": [
|
||||
"taskType",
|
||||
"result"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "task.abandon",
|
||||
"category": "task",
|
||||
"description": "업무 Task 중단",
|
||||
"allowedAttributes": [
|
||||
"taskType",
|
||||
"reasonCode"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "interaction.execute",
|
||||
"category": "interaction",
|
||||
"description": "KBX 의미 단위 업무 조작 실행",
|
||||
"allowedAttributes": [
|
||||
"interactionType",
|
||||
"commandId"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "search.execute",
|
||||
"category": "interaction",
|
||||
"description": "조회 실행",
|
||||
"allowedAttributes": [
|
||||
"resultBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command.execute",
|
||||
"category": "command",
|
||||
"description": "업무 Command 실행 시도",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"operationKind"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command.succeeded",
|
||||
"category": "command",
|
||||
"description": "업무 Command 성공",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"operationKind"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "command.failed",
|
||||
"category": "command",
|
||||
"description": "업무 Command 실패",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"problemType",
|
||||
"reasonCode"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "lookup.open",
|
||||
"category": "lookup",
|
||||
"description": "Lookup 열기",
|
||||
"allowedAttributes": [
|
||||
"entityType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "lookup.select",
|
||||
"category": "lookup",
|
||||
"description": "Lookup 선택 완료",
|
||||
"allowedAttributes": [
|
||||
"entityType",
|
||||
"selectionSource"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "grid.bulk_action",
|
||||
"category": "interaction",
|
||||
"description": "Grid 일괄처리 실행",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"countBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "validation.failed",
|
||||
"category": "quality",
|
||||
"description": "저장/업무 실행 전후 검증 실패",
|
||||
"allowedAttributes": [
|
||||
"stage",
|
||||
"errorCountBucket",
|
||||
"reasonCode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "excel.import.start",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 시작",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"rowCountBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "excel.import.completed",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 완료",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"result",
|
||||
"rowCountBucket"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "excel.import.failed",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 실패",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"reasonCode",
|
||||
"rowCountBucket"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "exception.open",
|
||||
"category": "exception",
|
||||
"description": "업무 예외 생성/노출",
|
||||
"allowedAttributes": [
|
||||
"exceptionType",
|
||||
"severity"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "exception.resolved",
|
||||
"category": "exception",
|
||||
"description": "업무 예외 해결",
|
||||
"allowedAttributes": [
|
||||
"exceptionType",
|
||||
"resolutionType"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.open",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 확인",
|
||||
"allowedAttributes": [
|
||||
"proposalType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.accept",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 승인",
|
||||
"allowedAttributes": [
|
||||
"proposalType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.reject",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 거절",
|
||||
"allowedAttributes": [
|
||||
"proposalType",
|
||||
"reasonCode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "manual.intervention",
|
||||
"category": "outcome",
|
||||
"description": "정상 자동처리 대신 사람의 확인/수정/판단이 필요했던 업무",
|
||||
"allowedAttributes": [
|
||||
"workType",
|
||||
"reasonCode",
|
||||
"exceptionType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "experiment.exposed",
|
||||
"category": "experiment",
|
||||
"description": "실험 Variant가 실제 화면에 렌더링되어 사용자에게 노출됨",
|
||||
"allowedAttributes": [
|
||||
"surface"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metrics": [
|
||||
{
|
||||
"key": "task_completion_time_ms",
|
||||
"label": "Task Completion Time",
|
||||
"numerator": "task.complete.duration_ms",
|
||||
"aggregation": "p50,p95",
|
||||
"unit": "ms"
|
||||
},
|
||||
{
|
||||
"key": "semantic_interactions_per_task",
|
||||
"label": "Interactions / Task",
|
||||
"numerator": "interaction.execute",
|
||||
"denominator": "task.complete",
|
||||
"aggregation": "ratio",
|
||||
"unit": "count"
|
||||
},
|
||||
{
|
||||
"key": "manual_intervention_rate",
|
||||
"label": "Manual Intervention Rate",
|
||||
"numerator": "ux_business_outcomes.manual_intervention_count",
|
||||
"denominator": "ux_business_outcomes.observed_count",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "validation_failure_rate",
|
||||
"label": "Validation Failure Rate",
|
||||
"numerator": "validation.failed",
|
||||
"denominator": "command.execute",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "import_failure_rate",
|
||||
"label": "Import Failure Rate",
|
||||
"numerator": "excel.import.failed",
|
||||
"denominator": "excel.import.start",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "exception_resolution_time_ms",
|
||||
"label": "Exception Resolution Time",
|
||||
"numerator": "exception.resolved.duration_ms",
|
||||
"aggregation": "p50,p95",
|
||||
"unit": "ms"
|
||||
},
|
||||
{
|
||||
"key": "ai_proposal_acceptance_rate",
|
||||
"label": "AI Proposal Acceptance Rate",
|
||||
"numerator": "ai.proposal.accept",
|
||||
"denominator": "ai.proposal.open",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"fixtureVersion": "0.0.0",
|
||||
"syntheticOnly": true,
|
||||
"fixtureSets": [],
|
||||
"refCount": 0
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"contractVersion": "0.0.0",
|
||||
"scenarios": []
|
||||
}
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"tokens": [
|
||||
{
|
||||
"path": "typography.fontFamily",
|
||||
"css": "--kbx-font-family",
|
||||
"type": "fontFamily",
|
||||
"role": "primitive",
|
||||
"value": "Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", Arial, sans-serif",
|
||||
"description": "업무 기본 Font Stack"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xs",
|
||||
"css": "--kbx-font-xs",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.sm",
|
||||
"css": "--kbx-font-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "13px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.md",
|
||||
"css": "--kbx-font-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "14px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.lg",
|
||||
"css": "--kbx-font-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xl",
|
||||
"css": "--kbx-font-xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "18px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.2xl",
|
||||
"css": "--kbx-font-2xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "color.white",
|
||||
"css": "--kbx-white",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#ffffff"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.25",
|
||||
"css": "--kbx-gray-25",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#fcfcfd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.50",
|
||||
"css": "--kbx-gray-50",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f9fafb"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.100",
|
||||
"css": "--kbx-gray-100",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f2f4f7"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.200",
|
||||
"css": "--kbx-gray-200",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#e4e7ec"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.300",
|
||||
"css": "--kbx-gray-300",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d0d5dd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.400",
|
||||
"css": "--kbx-gray-400",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#98a2b3"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.500",
|
||||
"css": "--kbx-gray-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#667085"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.700",
|
||||
"css": "--kbx-gray-700",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#344054"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.900",
|
||||
"css": "--kbx-gray-900",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#101828"
|
||||
},
|
||||
{
|
||||
"path": "color.blue.600",
|
||||
"css": "--kbx-blue-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#175cd3"
|
||||
},
|
||||
{
|
||||
"path": "color.green.600",
|
||||
"css": "--kbx-green-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#039855"
|
||||
},
|
||||
{
|
||||
"path": "color.orange.500",
|
||||
"css": "--kbx-orange-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f79009"
|
||||
},
|
||||
{
|
||||
"path": "color.red.600",
|
||||
"css": "--kbx-red-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d92d20"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.default",
|
||||
"css": "--kbx-color-surface",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.white}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.muted",
|
||||
"css": "--kbx-color-surface-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.50}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.subtle",
|
||||
"css": "--kbx-color-surface-subtle",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.100}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.hover",
|
||||
"css": "--kbx-color-surface-hover",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#f3f7fd"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.default",
|
||||
"css": "--kbx-color-text",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1d2939"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.muted",
|
||||
"css": "--kbx-color-text-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.default",
|
||||
"css": "--kbx-color-border",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.200}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.strong",
|
||||
"css": "--kbx-color-border-strong",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.400}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.action.primary",
|
||||
"css": "--kbx-color-primary",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.blue.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.success",
|
||||
"css": "--kbx-color-success",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.green.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.warning",
|
||||
"css": "--kbx-color-warning",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.orange.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.danger",
|
||||
"css": "--kbx-color-danger",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.red.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.focus",
|
||||
"css": "--kbx-color-focus",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1570ef"
|
||||
},
|
||||
{
|
||||
"path": "semantic.overlay",
|
||||
"css": "--kbx-color-overlay",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "rgba(16, 24, 40, .38)"
|
||||
},
|
||||
{
|
||||
"path": "spacing.0",
|
||||
"css": "--kbx-space-0",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"path": "spacing.1",
|
||||
"css": "--kbx-space-1",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.2",
|
||||
"css": "--kbx-space-2",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.3",
|
||||
"css": "--kbx-space-3",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.4",
|
||||
"css": "--kbx-space-4",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.5",
|
||||
"css": "--kbx-space-5",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.6",
|
||||
"css": "--kbx-space-6",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "24px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.8",
|
||||
"css": "--kbx-space-8",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "32px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.10",
|
||||
"css": "--kbx-space-10",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "40px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.12",
|
||||
"css": "--kbx-space-12",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "radius.sm",
|
||||
"css": "--kbx-radius-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "radius.md",
|
||||
"css": "--kbx-radius-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "6px"
|
||||
},
|
||||
{
|
||||
"path": "radius.lg",
|
||||
"css": "--kbx-radius-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "component.control.height",
|
||||
"css": "--kbx-control-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px",
|
||||
"description": "Desktop compact input/button baseline"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.rowHeight",
|
||||
"css": "--kbx-grid-row-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.headerHeight",
|
||||
"css": "--kbx-grid-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "36px"
|
||||
},
|
||||
{
|
||||
"path": "component.pageHeader.height",
|
||||
"css": "--kbx-page-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "component.commandBar.height",
|
||||
"css": "--kbx-command-bar-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "44px"
|
||||
},
|
||||
{
|
||||
"path": "component.form.labelWidth",
|
||||
"css": "--kbx-label-width",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "96px"
|
||||
},
|
||||
{
|
||||
"path": "component.touch.controlHeight",
|
||||
"css": "--kbx-control-touch",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "52px"
|
||||
}
|
||||
],
|
||||
"modes": {
|
||||
"compact": {
|
||||
"component.control.height": "34px",
|
||||
"component.grid.rowHeight": "34px",
|
||||
"component.grid.headerHeight": "36px"
|
||||
},
|
||||
"comfortable": {
|
||||
"component.control.height": "38px",
|
||||
"component.grid.rowHeight": "40px",
|
||||
"component.grid.headerHeight": "40px"
|
||||
},
|
||||
"touch": {
|
||||
"component.control.height": "52px",
|
||||
"component.grid.rowHeight": "52px",
|
||||
"component.grid.headerHeight": "48px"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# KBX v18 public contract baseline
|
||||
|
||||
Captured before v19 integration/resilience governance changes.
|
||||
@@ -0,0 +1,584 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"apiVersion": "1.5.0",
|
||||
"sourceSha256": "c07792e991247a14ac521f4e0b77c7ddf7a6784a0ad179eef2a87a5a73f1bdc8",
|
||||
"operationCount": 52,
|
||||
"operations": [
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/ai/ask",
|
||||
"permission": "common.ai.use",
|
||||
"id": "common.ai.ask",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/commit",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.commit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.createSession",
|
||||
"kind": "upload",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"contentType": "multipart/form-data"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/errors.xlsx",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.errorWorkbook",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.getSession",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "PUT",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/mapping",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/saved-mappings",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveNamedMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/{importType}/template",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.template",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/validate",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.validate",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/claim",
|
||||
"permission": "common.operations.claim",
|
||||
"id": "common.operations.claim",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/resolve",
|
||||
"permission": "common.operations.resolve",
|
||||
"id": "common.operations.resolve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/{id:guid}/retry",
|
||||
"permission": "common.operations.retry",
|
||||
"id": "common.operations.retry",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/operations/work-items",
|
||||
"permission": "common.operations.read",
|
||||
"id": "common.operations.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/reconcile/items/create-exceptions",
|
||||
"permission": "common.operations.create",
|
||||
"id": "common.reconcile.createExceptions",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/reconcile/items",
|
||||
"permission": "common.reconcile.read",
|
||||
"id": "common.reconcile.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notice",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notice",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/runtime/notifications/{Id}/read",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notificationRead",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notifications",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notifications",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/operations",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.operations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/suggestions",
|
||||
"permission": "common.suggestion.create",
|
||||
"id": "common.suggestions.submit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory/{itemId}/locations",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.locations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items/{id}",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.get",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/approve",
|
||||
"permission": "oms.claim.approve",
|
||||
"id": "oms.claims.approve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/complete",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.complete",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/hold",
|
||||
"permission": "oms.claim.hold",
|
||||
"id": "oms.claims.hold",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/claims",
|
||||
"permission": "oms.claim.read",
|
||||
"id": "oms.claims.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/start",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/register",
|
||||
"permission": "oms.order.create",
|
||||
"id": "oms.orders.register",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/orders",
|
||||
"permission": "oms.order.read",
|
||||
"id": "oms.orders.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/ship",
|
||||
"permission": "oms.order.ship",
|
||||
"id": "oms.orders.ship",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.getTask",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/exceptions",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.reportException",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/scan",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.scan",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200,
|
||||
422
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/quantity",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.setQuantity",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/start",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/ux/events",
|
||||
"permission": "common.telemetry.write",
|
||||
"id": "common.uxTelemetry.ingest",
|
||||
"kind": "command",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/ux/metrics",
|
||||
"permission": "common.ux.read",
|
||||
"id": "common.uxTelemetry.metrics",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/experiments/assignments",
|
||||
"permission": "common.experiment.evaluate",
|
||||
"id": "common.experiments.assignments",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/experiments",
|
||||
"permission": "common.experiment.read",
|
||||
"id": "common.experiments.overview",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/experiments/{experimentId}/rollout",
|
||||
"permission": "common.experiment.manage",
|
||||
"id": "common.experiments.rollout",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/experiments/{experimentId}/rollback",
|
||||
"permission": "common.experiment.manage",
|
||||
"id": "common.experiments.rollback",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSearchPanel",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxPageHeader",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxFormSection",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxConfirm",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelMenu",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxJobProgress",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAuditTrail",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxHelpPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAiPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxProposalPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxListPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterDetailPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQueuePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxReconcilePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,374 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMaskedValue",
|
||||
"category": "business",
|
||||
"purpose": "민감정보의 기본 마스킹·권한 기반 전체보기 진입점을 표준화",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"experimentVersion": "1.0.0",
|
||||
"sourceSha256": "2510a2927bab297858e09e75c8af9bb766d91b92cc0daf99433f6377d399fbf9",
|
||||
"principles": {
|
||||
"purpose": "controlled-ux-rollout-and-measurement",
|
||||
"serverAuthoritative": true,
|
||||
"stableAssignment": true,
|
||||
"exposureAfterRender": true,
|
||||
"killSwitchRequired": true,
|
||||
"maxRunningExperimentsPerScreen": 1,
|
||||
"safeUxOnly": true,
|
||||
"automaticRollbackOnGuardrailBreach": true,
|
||||
"statisticalClaim": "operational-threshold-only; do not claim statistical significance",
|
||||
"allowedSurfaces": [
|
||||
"layout",
|
||||
"information-emphasis",
|
||||
"default-filter",
|
||||
"navigation",
|
||||
"copy"
|
||||
],
|
||||
"prohibitedScopes": [
|
||||
"permission",
|
||||
"sensitive-data",
|
||||
"domain-rule",
|
||||
"validation",
|
||||
"idempotency",
|
||||
"workflow-safety",
|
||||
"wms-scan-rule",
|
||||
"inventory-truth"
|
||||
]
|
||||
},
|
||||
"featureFlags": [
|
||||
{
|
||||
"id": "oms.order-list.exception-summary-v2",
|
||||
"screenId": "OMS-ORD-001",
|
||||
"surface": "information-emphasis",
|
||||
"description": "기존 주문 Quick Filter를 이동시키지 않고 확인 필요 예외 요약을 보조적으로 노출하는 되돌릴 수 있는 UX 변경",
|
||||
"defaultVariant": "control",
|
||||
"killSwitch": true,
|
||||
"owner": "KBX"
|
||||
}
|
||||
],
|
||||
"experiments": [
|
||||
{
|
||||
"id": "exp.oms.order-list.exception-summary-v2",
|
||||
"flagId": "oms.order-list.exception-summary-v2",
|
||||
"screenId": "OMS-ORD-001",
|
||||
"state": "draft",
|
||||
"rolloutPercent": 0,
|
||||
"minExposurePerVariant": 200,
|
||||
"variants": [
|
||||
{
|
||||
"key": "control",
|
||||
"weight": 50
|
||||
},
|
||||
{
|
||||
"key": "exception-summary",
|
||||
"weight": 50
|
||||
}
|
||||
],
|
||||
"primaryMetric": {
|
||||
"key": "semantic_interactions_per_task",
|
||||
"direction": "lower",
|
||||
"minimumImprovementPercent": 10
|
||||
},
|
||||
"guardrails": [
|
||||
{
|
||||
"key": "task_completion_time_ms",
|
||||
"statistic": "p95",
|
||||
"maxRegressionPercent": 20
|
||||
},
|
||||
{
|
||||
"key": "validation_failure_rate",
|
||||
"statistic": "rate",
|
||||
"maxAbsoluteRegressionPercentagePoints": 2
|
||||
}
|
||||
],
|
||||
"globalGuardrails": [
|
||||
{
|
||||
"key": "manual_intervention_rate",
|
||||
"maxAbsoluteRegressionPercentagePoints": 0.5
|
||||
}
|
||||
],
|
||||
"notes": "Reference experiment only. v17 ships at draft/0%; rollout requires an explicit runtime decision and can be killed immediately."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,695 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"source": "contracts/fields/kbx.fields.json",
|
||||
"sourceSha256": "9720246fe70ca49effd9e1e86fb580c624797cce68e71f35ad5e1b42f6263521",
|
||||
"count": 50,
|
||||
"fields": [
|
||||
{
|
||||
"key": "address1",
|
||||
"label": "주소",
|
||||
"aliases": [
|
||||
"기본주소",
|
||||
"배송주소",
|
||||
"Address1"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "address2",
|
||||
"label": "상세주소",
|
||||
"aliases": [
|
||||
"주소2",
|
||||
"Address2"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "allocatedQty",
|
||||
"label": "할당수량",
|
||||
"aliases": [
|
||||
"AllocatedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "amount",
|
||||
"label": "금액",
|
||||
"aliases": [
|
||||
"Amount",
|
||||
"주문금액"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 2,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "availableQty",
|
||||
"label": "가용재고",
|
||||
"aliases": [
|
||||
"AvailableQty",
|
||||
"출고가능수량"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "barcode",
|
||||
"label": "바코드",
|
||||
"aliases": [
|
||||
"Barcode",
|
||||
"EAN",
|
||||
"JAN"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelId",
|
||||
"label": "판매채널ID",
|
||||
"aliases": [
|
||||
"ChannelId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "salesChannel",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelName",
|
||||
"label": "판매채널",
|
||||
"aliases": [
|
||||
"ChannelName",
|
||||
"채널"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdAt",
|
||||
"label": "등록일시",
|
||||
"aliases": [
|
||||
"CreatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdBy",
|
||||
"label": "등록자",
|
||||
"aliases": [
|
||||
"CreatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerCode",
|
||||
"label": "거래처코드",
|
||||
"aliases": [
|
||||
"거래처",
|
||||
"업체코드",
|
||||
"CustomerCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "customer",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerId",
|
||||
"label": "거래처ID",
|
||||
"aliases": [
|
||||
"CustomerId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "customer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerName",
|
||||
"label": "거래처명",
|
||||
"aliases": [
|
||||
"CustomerName",
|
||||
"업체명"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "damagedQty",
|
||||
"label": "불량수량",
|
||||
"aliases": [
|
||||
"DamagedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "exceptionCount",
|
||||
"label": "예외건수",
|
||||
"aliases": [
|
||||
"ExceptionCount",
|
||||
"오류건수"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "expiryDate",
|
||||
"label": "유통기한",
|
||||
"aliases": [
|
||||
"ExpiryDate",
|
||||
"ExpirationDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "holdQty",
|
||||
"label": "보류수량",
|
||||
"aliases": [
|
||||
"HoldQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemCode",
|
||||
"label": "품목코드",
|
||||
"aliases": [
|
||||
"상품코드",
|
||||
"SKU",
|
||||
"ItemCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemId",
|
||||
"label": "품목ID",
|
||||
"aliases": [
|
||||
"ItemId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "item",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemName",
|
||||
"label": "품목명",
|
||||
"aliases": [
|
||||
"상품명",
|
||||
"ItemName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 300,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemSummary",
|
||||
"label": "대표상품",
|
||||
"aliases": [
|
||||
"ItemSummary"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationCode",
|
||||
"label": "로케이션",
|
||||
"aliases": [
|
||||
"Location",
|
||||
"LocationCode",
|
||||
"위치"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "location",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationId",
|
||||
"label": "로케이션ID",
|
||||
"aliases": [
|
||||
"LocationId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "location",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "lotNo",
|
||||
"label": "LOT",
|
||||
"aliases": [
|
||||
"LotNo",
|
||||
"LOT번호"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "occurredAt",
|
||||
"label": "발생시각",
|
||||
"aliases": [
|
||||
"OccurredAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "onHandQty",
|
||||
"label": "현재고",
|
||||
"aliases": [
|
||||
"OnHandQty",
|
||||
"장부재고"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderDate",
|
||||
"label": "주문일",
|
||||
"aliases": [
|
||||
"주문일자",
|
||||
"OrderDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"required": true,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderedAt",
|
||||
"label": "주문일시",
|
||||
"aliases": [
|
||||
"OrderedAt",
|
||||
"주문시간"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderId",
|
||||
"label": "주문ID",
|
||||
"aliases": [
|
||||
"OrderId"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderNo",
|
||||
"label": "주문번호",
|
||||
"aliases": [
|
||||
"OrderNo",
|
||||
"주문ID"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderQty",
|
||||
"label": "주문수량",
|
||||
"aliases": [
|
||||
"주문수량",
|
||||
"수량",
|
||||
"Qty",
|
||||
"OrderQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false,
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"key": "ownerName",
|
||||
"label": "담당자",
|
||||
"aliases": [
|
||||
"OwnerName",
|
||||
"담당"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 100,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "phone",
|
||||
"label": "연락처",
|
||||
"aliases": [
|
||||
"휴대폰",
|
||||
"전화번호",
|
||||
"Phone"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "phone"
|
||||
},
|
||||
{
|
||||
"key": "pickedQty",
|
||||
"label": "피킹수량",
|
||||
"aliases": [
|
||||
"PickedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "postalCode",
|
||||
"label": "우편번호",
|
||||
"aliases": [
|
||||
"ZipCode",
|
||||
"PostalCode"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 20,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "quantity",
|
||||
"label": "수량",
|
||||
"aliases": [
|
||||
"Qty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "receiverName",
|
||||
"label": "수취인",
|
||||
"aliases": [
|
||||
"받는분",
|
||||
"수령인",
|
||||
"ReceiverName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "name"
|
||||
},
|
||||
{
|
||||
"key": "referenceNo",
|
||||
"label": "참조번호",
|
||||
"aliases": [
|
||||
"ReferenceNo"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "remark",
|
||||
"label": "비고",
|
||||
"aliases": [
|
||||
"메모",
|
||||
"배송메모",
|
||||
"Remark"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "shippedQty",
|
||||
"label": "출고수량",
|
||||
"aliases": [
|
||||
"ShippedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "specification",
|
||||
"label": "규격",
|
||||
"aliases": [
|
||||
"Specification",
|
||||
"Spec"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "status",
|
||||
"label": "상태",
|
||||
"aliases": [
|
||||
"Status"
|
||||
],
|
||||
"dataType": "status",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "totalQty",
|
||||
"label": "총수량",
|
||||
"aliases": [
|
||||
"TotalQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "unitPrice",
|
||||
"label": "단가",
|
||||
"aliases": [
|
||||
"판매단가",
|
||||
"UnitPrice"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedAt",
|
||||
"label": "수정일시",
|
||||
"aliases": [
|
||||
"UpdatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedBy",
|
||||
"label": "수정자",
|
||||
"aliases": [
|
||||
"UpdatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "version",
|
||||
"label": "버전",
|
||||
"aliases": [
|
||||
"Version",
|
||||
"RowVersion"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseCode",
|
||||
"label": "창고코드",
|
||||
"aliases": [
|
||||
"창고",
|
||||
"창고코드",
|
||||
"출고창고",
|
||||
"WarehouseCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "warehouse",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseId",
|
||||
"label": "창고ID",
|
||||
"aliases": [
|
||||
"WarehouseId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "warehouse",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseName",
|
||||
"label": "창고명",
|
||||
"aliases": [
|
||||
"WarehouseName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"integrationVersion": "0.0.0",
|
||||
"integrations": []
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-EXP-001",
|
||||
"path": "/internal/kbx/experiments",
|
||||
"section": "KBX",
|
||||
"order": 75
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-UX-001",
|
||||
"path": "/internal/kbx/ux-metrics",
|
||||
"section": "KBX",
|
||||
"order": 80
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,466 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"permissionVersion": "1.2.0",
|
||||
"permissions": [
|
||||
{
|
||||
"id": "common.ai.use",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "use",
|
||||
"risk": "medium",
|
||||
"description": "AI 설명·추천·초안 기능 사용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ai.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "AI 승인 제안의 실제 Command 실행 허용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.claim",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "claim",
|
||||
"risk": "medium",
|
||||
"description": "업무 예외를 내 처리건으로 지정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.create",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "대사 결과에서 운영 예외 생성",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.read",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 예외 센터 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.resolve",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "resolve",
|
||||
"risk": "high",
|
||||
"description": "수동 해결이 허용된 운영 예외 해결",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.retry",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "retry",
|
||||
"risk": "high",
|
||||
"description": "등록된 안전한 예외 Action 재처리",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.reconcile.read",
|
||||
"module": "COMMON",
|
||||
"resource": "reconcile",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 데이터 대사 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.runtime.read",
|
||||
"module": "COMMON",
|
||||
"resource": "runtime",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "런타임 상태·작업·알림 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.suggestion.create",
|
||||
"module": "COMMON",
|
||||
"resource": "suggestion",
|
||||
"action": "create",
|
||||
"risk": "low",
|
||||
"description": "현재 화면 사용자 제안 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "재고이동 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고이동 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.receive",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "receive",
|
||||
"risk": "high",
|
||||
"description": "이동재고 입고완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.ship",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "이동재고 출고",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.write",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "재고이동 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고현황 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.create",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "품목 신규·복사",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.read",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "품목 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.write",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "품목 수정·사용중지",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.cancel",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "cancel",
|
||||
"risk": "high",
|
||||
"description": "구매 취소",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "구매 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.read",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "구매 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.write",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "구매 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "imports.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "imports",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "Excel Import 생성·검증·반영",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "kbx.design.read",
|
||||
"module": "COMMON",
|
||||
"resource": "design-system",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX 내부 컴포넌트 카탈로그 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.approve",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "approve",
|
||||
"risk": "high",
|
||||
"description": "클레임 승인",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.hold",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "hold",
|
||||
"risk": "medium",
|
||||
"description": "클레임 보류",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.process",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "process",
|
||||
"risk": "high",
|
||||
"description": "클레임 처리 시작·완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.read",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "반품·클레임 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.create",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "주문 신규 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.import",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "import",
|
||||
"risk": "high",
|
||||
"description": "주문 Excel Import 실행",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.read",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "주문 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.ship",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "주문 출고지시",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.unmask",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-read",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 전체보기",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.export",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-export",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 비마스킹 Export",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.inventory.count",
|
||||
"module": "WMS",
|
||||
"resource": "inventory",
|
||||
"action": "count",
|
||||
"risk": "high",
|
||||
"description": "현장 재고실사 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.picking.execute",
|
||||
"module": "WMS",
|
||||
"resource": "picking",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "출고 피킹 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.putaway.execute",
|
||||
"module": "WMS",
|
||||
"resource": "putaway",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 적치 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.receiving.execute",
|
||||
"module": "WMS",
|
||||
"resource": "receiving",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 검수 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.execute",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "WMS 작업 시작",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.read",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "WMS 작업 Queue 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.telemetry.write",
|
||||
"module": "COMMON",
|
||||
"resource": "telemetry",
|
||||
"action": "write",
|
||||
"risk": "low",
|
||||
"description": "민감정보를 포함하지 않는 KBX 의미 단위 UX Telemetry 전송",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ux.read",
|
||||
"module": "COMMON",
|
||||
"resource": "ux-metrics",
|
||||
"action": "read",
|
||||
"risk": "medium",
|
||||
"description": "KBX UX 품질·자동화 지표 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.evaluate",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "evaluate",
|
||||
"risk": "low",
|
||||
"description": "현재 사용자에 대한 안전한 UX 실험 Variant 평가",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.read",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX UX 실험·점진배포 상태 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.manage",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "manage",
|
||||
"risk": "high",
|
||||
"description": "UX 실험 점진배포 비율 변경·일시중지·즉시 롤백",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"sourceSha256": "5c06fd380f07e56e7e0188cce405dfaf2c1a2361a2d3526237c96e8a6802cd42",
|
||||
"types": [
|
||||
"validation",
|
||||
"business-rule",
|
||||
"conflict",
|
||||
"permission",
|
||||
"not-found",
|
||||
"integration",
|
||||
"system"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-EXP-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "UX 실험·점진배포",
|
||||
"helpKey": "COMMON-EXP-001",
|
||||
"requiredPermissions": [
|
||||
"common.experiment.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/experiments/experiments.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-UX-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "UX 품질 지표",
|
||||
"helpKey": "COMMON-UX-001",
|
||||
"requiredPermissions": [
|
||||
"common.ux.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/ux-metrics/ux-metrics.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"policies": [
|
||||
{
|
||||
"id": "oms.order.recipient",
|
||||
"fields": [
|
||||
"receiverName",
|
||||
"phone",
|
||||
"postalCode",
|
||||
"address1",
|
||||
"address2"
|
||||
],
|
||||
"defaultExposure": "masked",
|
||||
"viewPermission": "oms.order.read",
|
||||
"revealPermission": "oms.order.recipient.unmask",
|
||||
"unmaskedExportPermission": "oms.order.recipient.export",
|
||||
"auditRequired": true,
|
||||
"aiExposure": "masked-only",
|
||||
"telemetryExposure": "never",
|
||||
"reasonRequired": false
|
||||
}
|
||||
],
|
||||
"ai": {
|
||||
"usePermission": "common.ai.use",
|
||||
"executePermission": "common.ai.execute",
|
||||
"executeRequiresProposalPermission": true,
|
||||
"defaultCapabilities": [
|
||||
"explain",
|
||||
"suggest",
|
||||
"draft"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,294 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"telemetryVersion": "1.1.0",
|
||||
"sourceSha256": "9f5de69498b657cb0d60df18c1e98c504a44eec555c4fc50d46f15f83a4ea1ce",
|
||||
"principles": {
|
||||
"purpose": "ux-improvement-and-operational-diagnosis",
|
||||
"noRawBusinessData": true,
|
||||
"noSensitiveData": true,
|
||||
"noDomClickSpying": true,
|
||||
"semanticEventsOnly": true,
|
||||
"rawRetentionDays": 90,
|
||||
"dailyAggregateRetentionMonths": 13
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"name": "screen.open",
|
||||
"category": "navigation",
|
||||
"description": "화면 진입",
|
||||
"allowedAttributes": [
|
||||
"module",
|
||||
"launchMode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "screen.close",
|
||||
"category": "navigation",
|
||||
"description": "화면 종료",
|
||||
"allowedAttributes": [
|
||||
"module",
|
||||
"closeReason"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "task.start",
|
||||
"category": "task",
|
||||
"description": "측정 가능한 업무 Task 시작",
|
||||
"allowedAttributes": [
|
||||
"taskType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "task.complete",
|
||||
"category": "task",
|
||||
"description": "업무 Task 정상 완료",
|
||||
"allowedAttributes": [
|
||||
"taskType",
|
||||
"result"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "task.abandon",
|
||||
"category": "task",
|
||||
"description": "업무 Task 중단",
|
||||
"allowedAttributes": [
|
||||
"taskType",
|
||||
"reasonCode"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "interaction.execute",
|
||||
"category": "interaction",
|
||||
"description": "KBX 의미 단위 업무 조작 실행",
|
||||
"allowedAttributes": [
|
||||
"interactionType",
|
||||
"commandId"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "search.execute",
|
||||
"category": "interaction",
|
||||
"description": "조회 실행",
|
||||
"allowedAttributes": [
|
||||
"resultBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command.execute",
|
||||
"category": "command",
|
||||
"description": "업무 Command 실행 시도",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"operationKind"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command.succeeded",
|
||||
"category": "command",
|
||||
"description": "업무 Command 성공",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"operationKind"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "command.failed",
|
||||
"category": "command",
|
||||
"description": "업무 Command 실패",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"problemType",
|
||||
"reasonCode"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "lookup.open",
|
||||
"category": "lookup",
|
||||
"description": "Lookup 열기",
|
||||
"allowedAttributes": [
|
||||
"entityType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "lookup.select",
|
||||
"category": "lookup",
|
||||
"description": "Lookup 선택 완료",
|
||||
"allowedAttributes": [
|
||||
"entityType",
|
||||
"selectionSource"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "grid.bulk_action",
|
||||
"category": "interaction",
|
||||
"description": "Grid 일괄처리 실행",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"countBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "validation.failed",
|
||||
"category": "quality",
|
||||
"description": "저장/업무 실행 전후 검증 실패",
|
||||
"allowedAttributes": [
|
||||
"stage",
|
||||
"errorCountBucket",
|
||||
"reasonCode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "excel.import.start",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 시작",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"rowCountBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "excel.import.completed",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 완료",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"result",
|
||||
"rowCountBucket"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "excel.import.failed",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 실패",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"reasonCode",
|
||||
"rowCountBucket"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "exception.open",
|
||||
"category": "exception",
|
||||
"description": "업무 예외 생성/노출",
|
||||
"allowedAttributes": [
|
||||
"exceptionType",
|
||||
"severity"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "exception.resolved",
|
||||
"category": "exception",
|
||||
"description": "업무 예외 해결",
|
||||
"allowedAttributes": [
|
||||
"exceptionType",
|
||||
"resolutionType"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.open",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 확인",
|
||||
"allowedAttributes": [
|
||||
"proposalType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.accept",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 승인",
|
||||
"allowedAttributes": [
|
||||
"proposalType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.reject",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 거절",
|
||||
"allowedAttributes": [
|
||||
"proposalType",
|
||||
"reasonCode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "manual.intervention",
|
||||
"category": "outcome",
|
||||
"description": "정상 자동처리 대신 사람의 확인/수정/판단이 필요했던 업무",
|
||||
"allowedAttributes": [
|
||||
"workType",
|
||||
"reasonCode",
|
||||
"exceptionType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "experiment.exposed",
|
||||
"category": "experiment",
|
||||
"description": "실험 Variant가 실제 화면에 렌더링되어 사용자에게 노출됨",
|
||||
"allowedAttributes": [
|
||||
"surface"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metrics": [
|
||||
{
|
||||
"key": "task_completion_time_ms",
|
||||
"label": "Task Completion Time",
|
||||
"numerator": "task.complete.duration_ms",
|
||||
"aggregation": "p50,p95",
|
||||
"unit": "ms"
|
||||
},
|
||||
{
|
||||
"key": "semantic_interactions_per_task",
|
||||
"label": "Interactions / Task",
|
||||
"numerator": "interaction.execute",
|
||||
"denominator": "task.complete",
|
||||
"aggregation": "ratio",
|
||||
"unit": "count"
|
||||
},
|
||||
{
|
||||
"key": "manual_intervention_rate",
|
||||
"label": "Manual Intervention Rate",
|
||||
"numerator": "ux_business_outcomes.manual_intervention_count",
|
||||
"denominator": "ux_business_outcomes.observed_count",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "validation_failure_rate",
|
||||
"label": "Validation Failure Rate",
|
||||
"numerator": "validation.failed",
|
||||
"denominator": "command.execute",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "import_failure_rate",
|
||||
"label": "Import Failure Rate",
|
||||
"numerator": "excel.import.failed",
|
||||
"denominator": "excel.import.start",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "exception_resolution_time_ms",
|
||||
"label": "Exception Resolution Time",
|
||||
"numerator": "exception.resolved.duration_ms",
|
||||
"aggregation": "p50,p95",
|
||||
"unit": "ms"
|
||||
},
|
||||
{
|
||||
"key": "ai_proposal_acceptance_rate",
|
||||
"label": "AI Proposal Acceptance Rate",
|
||||
"numerator": "ai.proposal.accept",
|
||||
"denominator": "ai.proposal.open",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"fixtureVersion": "1.0.0",
|
||||
"sourceSha256": "0a908467034a2f06e02ca63ea41828556b126390692fa307bc140c302210492e",
|
||||
"syntheticOnly": true,
|
||||
"fixedReferenceClock": "2026-08-08T09:00:00Z",
|
||||
"testTenant": {
|
||||
"id": "11111111-1111-4111-8111-111111111111",
|
||||
"key": "KBX-TEST-TENANT"
|
||||
},
|
||||
"fixtureSets": [
|
||||
{
|
||||
"id": "fixture.oms.orders.bulk-ship",
|
||||
"description": "출고 가능 2건 + 이미 완료되어 거부될 1건",
|
||||
"refs": [
|
||||
"order.ship.ready.1",
|
||||
"order.ship.ready.2",
|
||||
"order.ship.rejected.1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.oms.order-register",
|
||||
"description": "거래처/창고/품목 Lookup 입력용",
|
||||
"refs": [
|
||||
"customer.test.1",
|
||||
"warehouse.seoul",
|
||||
"item.shoe.black270"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.oms.order-conflict",
|
||||
"description": "version=7 주문 한 건",
|
||||
"refs": [
|
||||
"order.conflict.1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.oms.order-import",
|
||||
"description": "6행 합성 Excel Import",
|
||||
"refs": [
|
||||
"file.order-import.6rows"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.wms.picking",
|
||||
"description": "A-03-02 위치 피킹 2개 필요",
|
||||
"refs": [
|
||||
"task.pick.1",
|
||||
"scan.location.a0302",
|
||||
"scan.item.shoe",
|
||||
"scan.item.wrong"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.common.operations",
|
||||
"description": "sourceVersion 10→11→10 순서 검증",
|
||||
"refs": [
|
||||
"event.stock-shortage.v10",
|
||||
"event.stock-recovered.v11"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.common.reconcile",
|
||||
"description": "OMS 10 / WMS 8 대사",
|
||||
"refs": [
|
||||
"reconcile.oms-wms.pending"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.erp.inventory-move",
|
||||
"description": "정상 이동과 동일창고 오류",
|
||||
"refs": [
|
||||
"move.valid.1",
|
||||
"move.invalid.same-warehouse"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.shell.user",
|
||||
"description": "Workspace 미저장 변경 UI 전용",
|
||||
"refs": [
|
||||
"ui.order.receiver"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refCount": 26
|
||||
}
|
||||
@@ -0,0 +1,299 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"contractVersion": "1.0.0",
|
||||
"sourceSha256": "a90eaa11df50ee0a6e3cf1df2343486150d19735077bca53c2c477990c914b2c",
|
||||
"fixtureVersion": "1.0.0",
|
||||
"fixtureSourceSha256": "0a908467034a2f06e02ca63ea41828556b126390692fa307bc140c302210492e",
|
||||
"fixedReferenceClock": "2026-08-08T09:00:00Z",
|
||||
"scenarios": [
|
||||
{
|
||||
"id": "scenario.oms.order-list.bulk-ship",
|
||||
"title": "OMS 주문조회 대량 출고지시 부분성공",
|
||||
"screenId": "OMS-ORD-001",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"golden-screen",
|
||||
"bulk",
|
||||
"idempotency",
|
||||
"audit",
|
||||
"outbox"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.oms.orders.bulk-ship"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.read",
|
||||
"oms.order.ship"
|
||||
],
|
||||
"apiOperations": [
|
||||
"oms.orders.search",
|
||||
"oms.orders.ship"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 7,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"screenshot",
|
||||
"api-transcript",
|
||||
"db-assertions",
|
||||
"correlation-ids"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.oms.order-register.keyboard",
|
||||
"title": "OMS 주문등록 키보드 중심 저장",
|
||||
"screenId": "OMS-ORD-002",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"golden-screen",
|
||||
"keyboard",
|
||||
"lookup",
|
||||
"validation",
|
||||
"audit"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.oms.order-register"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.create",
|
||||
"oms.order.read"
|
||||
],
|
||||
"apiOperations": [
|
||||
"lookup.customers.search",
|
||||
"lookup.items.resolveByCode",
|
||||
"lookup.warehouses.resolveByCode",
|
||||
"oms.orders.register"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 6,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"screenshot",
|
||||
"api-transcript",
|
||||
"db-assertions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.oms.order-register.conflict",
|
||||
"title": "OMS 주문수정 Optimistic Concurrency 충돌",
|
||||
"screenId": "OMS-ORD-002",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"concurrency",
|
||||
"conflict",
|
||||
"recovery"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.oms.order-conflict"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.create",
|
||||
"oms.order.read"
|
||||
],
|
||||
"apiOperations": [
|
||||
"oms.orders.register"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"api-transcript",
|
||||
"db-assertions",
|
||||
"problem-json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.oms.order-import.partial",
|
||||
"title": "OMS 주문 Excel 검증 후 부분 반영",
|
||||
"screenId": "OMS-ORD-003",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"excel",
|
||||
"mapping",
|
||||
"staging",
|
||||
"partial-success",
|
||||
"job"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.oms.order-import"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"apiOperations": [
|
||||
"common.imports.createSession",
|
||||
"common.imports.validate",
|
||||
"common.imports.commit",
|
||||
"common.imports.getSession"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 7,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"api-transcript",
|
||||
"import-session-snapshot",
|
||||
"error-workbook-metadata",
|
||||
"db-assertions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.wms.picking.idempotent-replay",
|
||||
"title": "WMS 피킹 응답유실 후 동일 Scan Replay",
|
||||
"screenId": "WMS-PICK-001",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"golden-screen",
|
||||
"scanner",
|
||||
"idempotency",
|
||||
"network"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.wms.picking"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"apiOperations": [
|
||||
"wms.picking.getTask",
|
||||
"wms.picking.start",
|
||||
"wms.picking.scan"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"api-transcript",
|
||||
"db-assertions",
|
||||
"scanner-event-log"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.wms.picking.wrong-item",
|
||||
"title": "WMS 다른 상품 Scan은 재시도 Queue 비대상",
|
||||
"screenId": "WMS-PICK-001",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"scanner",
|
||||
"business-error",
|
||||
"retry-policy"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.wms.picking"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"apiOperations": [
|
||||
"wms.picking.scan"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"api-transcript",
|
||||
"db-assertions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.common.operations.stale-event",
|
||||
"title": "업무 예외 해결 후 오래된 Event가 재오픈하지 않음",
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"exception",
|
||||
"outbox",
|
||||
"projection",
|
||||
"ordering"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.common.operations"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"common.operations.read",
|
||||
"common.operations.resolve"
|
||||
],
|
||||
"apiOperations": [
|
||||
"common.operations.search"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"db-assertions",
|
||||
"projection-event-log"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.common.reconcile.grace-period",
|
||||
"title": "OMS-WMS 대사 Grace Period 내 Pending 이후 Mismatch",
|
||||
"screenId": "COMMON-REC-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"reconcile",
|
||||
"eventual-consistency"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.common.reconcile"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"apiOperations": [
|
||||
"common.reconcile.search"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"db-assertions",
|
||||
"clock-snapshot"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.erp.inventory-move.workflow",
|
||||
"title": "ERP 재고이동 정상 상태전이와 잘못된 창고 차단",
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"workflow",
|
||||
"domain-validation",
|
||||
"audit"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.erp.inventory-move"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read",
|
||||
"erp.inventory.move.write"
|
||||
],
|
||||
"apiOperations": [],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 3,
|
||||
"evidence": [
|
||||
"db-assertions",
|
||||
"workflow-log"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.shell.unsaved-tab",
|
||||
"title": "Workspace Tab 미저장 변경 보호",
|
||||
"screenId": "OMS-ORD-002",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"shell",
|
||||
"dirty-state",
|
||||
"keyboard"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.shell.user"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"apiOperations": [],
|
||||
"isolation": "ui-only",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"screenshot"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"tokens": [
|
||||
{
|
||||
"path": "typography.fontFamily",
|
||||
"css": "--kbx-font-family",
|
||||
"type": "fontFamily",
|
||||
"role": "primitive",
|
||||
"value": "Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", Arial, sans-serif",
|
||||
"description": "업무 기본 Font Stack"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xs",
|
||||
"css": "--kbx-font-xs",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.sm",
|
||||
"css": "--kbx-font-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "13px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.md",
|
||||
"css": "--kbx-font-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "14px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.lg",
|
||||
"css": "--kbx-font-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.xl",
|
||||
"css": "--kbx-font-xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "18px"
|
||||
},
|
||||
{
|
||||
"path": "typography.size.2xl",
|
||||
"css": "--kbx-font-2xl",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "color.white",
|
||||
"css": "--kbx-white",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#ffffff"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.25",
|
||||
"css": "--kbx-gray-25",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#fcfcfd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.50",
|
||||
"css": "--kbx-gray-50",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f9fafb"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.100",
|
||||
"css": "--kbx-gray-100",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f2f4f7"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.200",
|
||||
"css": "--kbx-gray-200",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#e4e7ec"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.300",
|
||||
"css": "--kbx-gray-300",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d0d5dd"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.400",
|
||||
"css": "--kbx-gray-400",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#98a2b3"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.500",
|
||||
"css": "--kbx-gray-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#667085"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.700",
|
||||
"css": "--kbx-gray-700",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#344054"
|
||||
},
|
||||
{
|
||||
"path": "color.gray.900",
|
||||
"css": "--kbx-gray-900",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#101828"
|
||||
},
|
||||
{
|
||||
"path": "color.blue.600",
|
||||
"css": "--kbx-blue-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#175cd3"
|
||||
},
|
||||
{
|
||||
"path": "color.green.600",
|
||||
"css": "--kbx-green-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#039855"
|
||||
},
|
||||
{
|
||||
"path": "color.orange.500",
|
||||
"css": "--kbx-orange-500",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#f79009"
|
||||
},
|
||||
{
|
||||
"path": "color.red.600",
|
||||
"css": "--kbx-red-600",
|
||||
"type": "color",
|
||||
"role": "primitive",
|
||||
"value": "#d92d20"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.default",
|
||||
"css": "--kbx-color-surface",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.white}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.muted",
|
||||
"css": "--kbx-color-surface-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.50}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.subtle",
|
||||
"css": "--kbx-color-surface-subtle",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.100}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.surface.hover",
|
||||
"css": "--kbx-color-surface-hover",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#f3f7fd"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.default",
|
||||
"css": "--kbx-color-text",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1d2939"
|
||||
},
|
||||
{
|
||||
"path": "semantic.text.muted",
|
||||
"css": "--kbx-color-text-muted",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.default",
|
||||
"css": "--kbx-color-border",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.200}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.border.strong",
|
||||
"css": "--kbx-color-border-strong",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.gray.400}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.action.primary",
|
||||
"css": "--kbx-color-primary",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.blue.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.success",
|
||||
"css": "--kbx-color-success",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.green.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.warning",
|
||||
"css": "--kbx-color-warning",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.orange.500}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.status.danger",
|
||||
"css": "--kbx-color-danger",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "{color.red.600}"
|
||||
},
|
||||
{
|
||||
"path": "semantic.focus",
|
||||
"css": "--kbx-color-focus",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "#1570ef"
|
||||
},
|
||||
{
|
||||
"path": "semantic.overlay",
|
||||
"css": "--kbx-color-overlay",
|
||||
"type": "color",
|
||||
"role": "semantic",
|
||||
"value": "rgba(16, 24, 40, .38)"
|
||||
},
|
||||
{
|
||||
"path": "spacing.0",
|
||||
"css": "--kbx-space-0",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"path": "spacing.1",
|
||||
"css": "--kbx-space-1",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.2",
|
||||
"css": "--kbx-space-2",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.3",
|
||||
"css": "--kbx-space-3",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "12px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.4",
|
||||
"css": "--kbx-space-4",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "16px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.5",
|
||||
"css": "--kbx-space-5",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "20px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.6",
|
||||
"css": "--kbx-space-6",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "24px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.8",
|
||||
"css": "--kbx-space-8",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "32px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.10",
|
||||
"css": "--kbx-space-10",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "40px"
|
||||
},
|
||||
{
|
||||
"path": "spacing.12",
|
||||
"css": "--kbx-space-12",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "radius.sm",
|
||||
"css": "--kbx-radius-sm",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "4px"
|
||||
},
|
||||
{
|
||||
"path": "radius.md",
|
||||
"css": "--kbx-radius-md",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "6px"
|
||||
},
|
||||
{
|
||||
"path": "radius.lg",
|
||||
"css": "--kbx-radius-lg",
|
||||
"type": "dimension",
|
||||
"role": "primitive",
|
||||
"value": "8px"
|
||||
},
|
||||
{
|
||||
"path": "component.control.height",
|
||||
"css": "--kbx-control-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px",
|
||||
"description": "Desktop compact input/button baseline"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.rowHeight",
|
||||
"css": "--kbx-grid-row-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "34px"
|
||||
},
|
||||
{
|
||||
"path": "component.grid.headerHeight",
|
||||
"css": "--kbx-grid-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "36px"
|
||||
},
|
||||
{
|
||||
"path": "component.pageHeader.height",
|
||||
"css": "--kbx-page-header-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "48px"
|
||||
},
|
||||
{
|
||||
"path": "component.commandBar.height",
|
||||
"css": "--kbx-command-bar-height",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "44px"
|
||||
},
|
||||
{
|
||||
"path": "component.form.labelWidth",
|
||||
"css": "--kbx-label-width",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "96px"
|
||||
},
|
||||
{
|
||||
"path": "component.touch.controlHeight",
|
||||
"css": "--kbx-control-touch",
|
||||
"type": "dimension",
|
||||
"role": "component",
|
||||
"value": "52px"
|
||||
}
|
||||
],
|
||||
"modes": {
|
||||
"compact": {
|
||||
"component.control.height": "34px",
|
||||
"component.grid.rowHeight": "34px",
|
||||
"component.grid.headerHeight": "36px"
|
||||
},
|
||||
"comfortable": {
|
||||
"component.control.height": "38px",
|
||||
"component.grid.rowHeight": "40px",
|
||||
"component.grid.headerHeight": "40px"
|
||||
},
|
||||
"touch": {
|
||||
"component.control.height": "52px",
|
||||
"component.grid.rowHeight": "52px",
|
||||
"component.grid.headerHeight": "48px"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# KBX v19 public contract baseline
|
||||
|
||||
Runtime public contract baseline copied from the v19 generated artifacts before v20 provider-adapter governance changes.
|
||||
@@ -0,0 +1,606 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"apiVersion": "1.6.0",
|
||||
"sourceSha256": "f4ed4951b91811241d5623f8c0022a6447950f498dc95bf02a2771b539d7e2d0",
|
||||
"operationCount": 54,
|
||||
"operations": [
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/ai/ask",
|
||||
"permission": "common.ai.use",
|
||||
"id": "common.ai.ask",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/commit",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.commit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.createSession",
|
||||
"kind": "upload",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"contentType": "multipart/form-data"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/errors.xlsx",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.errorWorkbook",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.getSession",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "PUT",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/mapping",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/saved-mappings",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.saveNamedMapping",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/imports/{importType}/template",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.template",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
],
|
||||
"responseType": "blob"
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/imports/sessions/{sessionId:guid}/validate",
|
||||
"permission": "imports.execute",
|
||||
"id": "common.imports.validate",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/claim",
|
||||
"permission": "common.operations.claim",
|
||||
"id": "common.operations.claim",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/resolve",
|
||||
"permission": "common.operations.resolve",
|
||||
"id": "common.operations.resolve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/operations/work-items/{id:guid}/retry",
|
||||
"permission": "common.operations.retry",
|
||||
"id": "common.operations.retry",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/operations/work-items",
|
||||
"permission": "common.operations.read",
|
||||
"id": "common.operations.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/reconcile/items/create-exceptions",
|
||||
"permission": "common.operations.create",
|
||||
"id": "common.reconcile.createExceptions",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/reconcile/items",
|
||||
"permission": "common.reconcile.read",
|
||||
"id": "common.reconcile.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notice",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notice",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/runtime/notifications/{Id}/read",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notificationRead",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/notifications",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.notifications",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/runtime/operations",
|
||||
"permission": "common.runtime.read",
|
||||
"id": "common.runtime.operations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/common/suggestions",
|
||||
"permission": "common.suggestion.create",
|
||||
"id": "common.suggestions.submit",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory/{itemId}/locations",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.locations",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/inventory",
|
||||
"permission": "erp.inventory.read",
|
||||
"id": "erp.inventory.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items/{id}",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.get",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/erp/items",
|
||||
"permission": "erp.item.read",
|
||||
"id": "erp.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/customers",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.customers.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/items",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.items.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/by-code/{code}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveByCode",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses/{id}",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.resolveById",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/lookups/warehouses",
|
||||
"permission": "oms.order.read",
|
||||
"id": "lookup.warehouses.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/approve",
|
||||
"permission": "oms.claim.approve",
|
||||
"id": "oms.claims.approve",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/complete",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.complete",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/hold",
|
||||
"permission": "oms.claim.hold",
|
||||
"id": "oms.claims.hold",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/claims",
|
||||
"permission": "oms.claim.read",
|
||||
"id": "oms.claims.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/claims/{id:guid}/start",
|
||||
"permission": "oms.claim.process",
|
||||
"id": "oms.claims.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/register",
|
||||
"permission": "oms.order.create",
|
||||
"id": "oms.orders.register",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/oms/orders",
|
||||
"permission": "oms.order.read",
|
||||
"id": "oms.orders.search",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/oms/orders/ship",
|
||||
"permission": "oms.order.ship",
|
||||
"id": "oms.orders.ship",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.getTask",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/exceptions",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.reportException",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/scan",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.scan",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200,
|
||||
422
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/quantity",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.setQuantity",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/wms/picking/tasks/{taskId:guid}/start",
|
||||
"permission": "wms.picking.execute",
|
||||
"id": "wms.picking.start",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/ux/events",
|
||||
"permission": "common.telemetry.write",
|
||||
"id": "common.uxTelemetry.ingest",
|
||||
"kind": "command",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/ux/metrics",
|
||||
"permission": "common.ux.read",
|
||||
"id": "common.uxTelemetry.metrics",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/experiments/assignments",
|
||||
"permission": "common.experiment.evaluate",
|
||||
"id": "common.experiments.assignments",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/kbx/experiments",
|
||||
"permission": "common.experiment.read",
|
||||
"id": "common.experiments.overview",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/experiments/{experimentId}/rollout",
|
||||
"permission": "common.experiment.manage",
|
||||
"id": "common.experiments.rollout",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/kbx/experiments/{experimentId}/rollback",
|
||||
"permission": "common.experiment.manage",
|
||||
"id": "common.experiments.rollback",
|
||||
"kind": "command",
|
||||
"idempotency": "supported",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"path": "/api/integrations/attempts/{attemptId:guid}",
|
||||
"permission": "common.integration.read",
|
||||
"id": "common.integrations.getAttempt",
|
||||
"kind": "query",
|
||||
"idempotency": "none",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "POST",
|
||||
"path": "/api/integrations/attempts/{attemptId:guid}/retry",
|
||||
"permission": "common.integration.retry",
|
||||
"id": "common.integrations.retryAttempt",
|
||||
"kind": "command",
|
||||
"idempotency": "required",
|
||||
"successStatuses": [
|
||||
200
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,331 @@
|
||||
[
|
||||
{
|
||||
"component": "KbxInput",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxNumberField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMoneyField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQuantityField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateField",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDateRange",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSelect",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxLookup",
|
||||
"group": "input",
|
||||
"scenarioProfile": "common-input",
|
||||
"states": [
|
||||
"default",
|
||||
"required",
|
||||
"readonly",
|
||||
"disabled",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxButton",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled",
|
||||
"loading",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxCommandBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxSearchPanel",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxPageHeader",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxFormSection",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxBulkActionBar",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"disabled"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxIntegrationState",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxStatus",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxToast",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxConfirm",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDialog",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDrawer",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxDataGrid",
|
||||
"group": "grid",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelMenu",
|
||||
"group": "command",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxExcelImport",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxJobProgress",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default",
|
||||
"loading",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAuditTrail",
|
||||
"group": "feedback",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxHelpPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxAiPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"loading"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxProposalPanel",
|
||||
"group": "overlay",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxListPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxTransactionPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxMasterDetailPage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxQueuePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxReconcilePage",
|
||||
"group": "template",
|
||||
"states": [
|
||||
"default",
|
||||
"error"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxWmsMobilePage",
|
||||
"group": "wms",
|
||||
"states": [
|
||||
"default",
|
||||
"error",
|
||||
"keyboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"component": "KbxApplicationShell",
|
||||
"group": "shell",
|
||||
"states": [
|
||||
"default",
|
||||
"keyboard"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,380 @@
|
||||
[
|
||||
{
|
||||
"name": "KbxButton",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 업무 명령 버튼",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTextField",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateField",
|
||||
"category": "primitive",
|
||||
"purpose": "키보드 직접입력을 포함한 날짜 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookup",
|
||||
"category": "business",
|
||||
"purpose": "코드/명칭 기반 업무 엔터티 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxLookupDialog",
|
||||
"category": "business",
|
||||
"purpose": "Lookup 검색 및 키보드 선택 Dialog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSearchPanel",
|
||||
"category": "business",
|
||||
"purpose": "조회조건의 고정 배치와 상세조건 확장",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxCommandBar",
|
||||
"category": "business",
|
||||
"purpose": "조회/편집/Workflow/출력 명령의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDataGrid",
|
||||
"category": "business",
|
||||
"purpose": "조회·편집·대량처리용 업무 Grid",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFormSection",
|
||||
"category": "business",
|
||||
"purpose": "Master/Transaction 입력 Section",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxValidationSummary",
|
||||
"category": "business",
|
||||
"purpose": "저장 실패 입력 오류의 요약 및 이동",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxStatus",
|
||||
"category": "business",
|
||||
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxHelpPanel",
|
||||
"category": "business",
|
||||
"purpose": "화면 목적·사용순서·단축키·주의사항 도움말",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxListPage",
|
||||
"category": "template",
|
||||
"purpose": "조회형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxTransactionPage",
|
||||
"category": "template",
|
||||
"purpose": "Header/Detail 거래형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterPage",
|
||||
"category": "template",
|
||||
"purpose": "기준정보 목록/상세 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMasterDetailPage",
|
||||
"category": "template",
|
||||
"purpose": "Master/Detail 탐색형 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsMobilePage",
|
||||
"category": "wms",
|
||||
"purpose": "PDA/Scanner 현장 작업 Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBarcodeCapture",
|
||||
"category": "wms",
|
||||
"purpose": "Keyboard-wedge/수동 바코드 입력 수집",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNetworkIndicator",
|
||||
"category": "wms",
|
||||
"purpose": "현장 네트워크 및 대기 Command 상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWmsActionButton",
|
||||
"category": "wms",
|
||||
"purpose": "장갑/터치 환경용 주요 업무 CTA",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelMenu",
|
||||
"category": "business",
|
||||
"purpose": "업무 화면의 Excel 다운로드·업로드 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExcelImport",
|
||||
"category": "business",
|
||||
"purpose": "파일·매핑·검증·반영 공통 Excel Import 흐름",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxJobProgress",
|
||||
"category": "business",
|
||||
"purpose": "Hangfire 장시간 작업 진행상태 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxImportPage",
|
||||
"category": "template",
|
||||
"purpose": "Excel Import 전용 표준 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionCenter",
|
||||
"category": "business",
|
||||
"purpose": "예외 요약·목록·상세·안전한 후속 Action을 결합한 운영 컴포넌트",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionSummary",
|
||||
"category": "business",
|
||||
"purpose": "업무 예외 유형별 건수와 빠른 필터",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxExceptionDetailDrawer",
|
||||
"category": "business",
|
||||
"purpose": "예외 원인·대상·다음 행동을 맥락 유지 상태에서 처리",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "사용자가 지금 처리해야 할 업무와 예외를 우선하는 Queue 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxReconcilePage",
|
||||
"category": "template",
|
||||
"purpose": "Expected/Actual/Difference 기반 정합성 대사 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUtilityRail",
|
||||
"category": "business",
|
||||
"purpose": "도움말·AI·사용자 제안을 동일한 우측 보조영역에 통합",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiAssistant",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 Context 기반 설명·추천·제안 진입점",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUserSuggestionPanel",
|
||||
"category": "business",
|
||||
"purpose": "현재 화면 맥락을 포함한 저마찰 사용자 개선 제안",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxRuntimeBanner",
|
||||
"category": "business",
|
||||
"purpose": "장애·읽기전용·오프라인 등 현재 운영모드를 화면 상단에 명확히 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFreshnessIndicator",
|
||||
"category": "business",
|
||||
"purpose": "조회 데이터의 관측시각과 stale 여부를 표시하고 재조회를 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConflictResolver",
|
||||
"category": "business",
|
||||
"purpose": "낙관적 동시성 충돌 시 내 화면과 최신 값을 비교하고 안전하게 다시 읽기",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxOperationCenter",
|
||||
"category": "business",
|
||||
"purpose": "Excel·대량처리·연계 등 장시간 작업의 진행률과 결과를 지속적으로 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNotificationCenter",
|
||||
"category": "business",
|
||||
"purpose": "사용자가 확인해야 할 완료·부분실패·운영 알림을 비차단 방식으로 제공",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkflowBar",
|
||||
"category": "business",
|
||||
"purpose": "현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxGlobalHeader",
|
||||
"category": "shell",
|
||||
"purpose": "제품·모듈·메뉴검색·운영알림을 고정 배치하는 전역 Header",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSideNavigation",
|
||||
"category": "shell",
|
||||
"purpose": "즐겨찾기·최근메뉴·모듈별 업무메뉴를 동일 문법으로 탐색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxWorkspaceTabs",
|
||||
"category": "shell",
|
||||
"purpose": "최대 표시범위와 Overflow를 가진 다중 업무 Workspace Tab",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMenuSearch",
|
||||
"category": "shell",
|
||||
"purpose": "메뉴명·화면코드·업무 키워드 기반 저학습 메뉴검색",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxApplicationShell",
|
||||
"category": "shell",
|
||||
"purpose": "Global Header·Side Navigation·Workspace Tabs·업무영역을 통합하는 Application Shell",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxUnsavedChangesDialog",
|
||||
"category": "shell",
|
||||
"purpose": "Workspace 이동·종료 시 미저장 변경의 유지·폐기·저장후이동을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxInput",
|
||||
"category": "primitive",
|
||||
"purpose": "표준 문자열 입력의 canonical API",
|
||||
"version": "1.1.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxNumberField",
|
||||
"category": "primitive",
|
||||
"purpose": "숫자 입력·표시 형식을 분리한 공통 숫자 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMoneyField",
|
||||
"category": "business",
|
||||
"purpose": "통화·정밀도·음수정책을 포함한 금액 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQuantityField",
|
||||
"category": "business",
|
||||
"purpose": "단위·가용수량을 포함한 업무 수량 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDateRange",
|
||||
"category": "business",
|
||||
"purpose": "ERP 조회용 시작일·종료일 범위 입력",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxSelect",
|
||||
"category": "primitive",
|
||||
"purpose": "짧고 고정된 Enum 선택",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxPageHeader",
|
||||
"category": "business",
|
||||
"purpose": "화면명·경로·Utility 진입점의 고정 배치",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxBulkActionBar",
|
||||
"category": "business",
|
||||
"purpose": "선택 건수와 대량 업무 Action의 공통 표현",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDialog",
|
||||
"category": "primitive",
|
||||
"purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxDrawer",
|
||||
"category": "primitive",
|
||||
"purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxToast",
|
||||
"category": "business",
|
||||
"purpose": "시간이 지나도 해결이 필요하지 않은 성공·정보 Feedback",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxConfirm",
|
||||
"category": "business",
|
||||
"purpose": "위험 수준과 업무 결과를 설명하는 확인 UX",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAuditTrail",
|
||||
"category": "business",
|
||||
"purpose": "사용자 관점의 변경 전·후·행위자·사유 이력 표시",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxProposalPanel",
|
||||
"category": "business",
|
||||
"purpose": "AI 변경 제안을 실제 반영 전 검토·승인하는 공통 패턴",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxAiPanel",
|
||||
"category": "business",
|
||||
"purpose": "KbxAiAssistant의 표준 명칭 호환 API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxFastEntryPage",
|
||||
"category": "template",
|
||||
"purpose": "Enter·Paste 중심 대량 행 입력 화면",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxQueuePage",
|
||||
"category": "template",
|
||||
"purpose": "Work Summary·Exception·Queue·Quick Action 표준 Template",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxMaskedValue",
|
||||
"category": "business",
|
||||
"purpose": "민감정보의 기본 마스킹·권한 기반 전체보기 진입점을 표준화",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "KbxIntegrationState",
|
||||
"category": "business",
|
||||
"purpose": "Business State와 분리된 외부연계 대기·재시도·완료·실패 상태를 사용자에게 설명",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"experimentVersion": "1.0.0",
|
||||
"sourceSha256": "2510a2927bab297858e09e75c8af9bb766d91b92cc0daf99433f6377d399fbf9",
|
||||
"principles": {
|
||||
"purpose": "controlled-ux-rollout-and-measurement",
|
||||
"serverAuthoritative": true,
|
||||
"stableAssignment": true,
|
||||
"exposureAfterRender": true,
|
||||
"killSwitchRequired": true,
|
||||
"maxRunningExperimentsPerScreen": 1,
|
||||
"safeUxOnly": true,
|
||||
"automaticRollbackOnGuardrailBreach": true,
|
||||
"statisticalClaim": "operational-threshold-only; do not claim statistical significance",
|
||||
"allowedSurfaces": [
|
||||
"layout",
|
||||
"information-emphasis",
|
||||
"default-filter",
|
||||
"navigation",
|
||||
"copy"
|
||||
],
|
||||
"prohibitedScopes": [
|
||||
"permission",
|
||||
"sensitive-data",
|
||||
"domain-rule",
|
||||
"validation",
|
||||
"idempotency",
|
||||
"workflow-safety",
|
||||
"wms-scan-rule",
|
||||
"inventory-truth"
|
||||
]
|
||||
},
|
||||
"featureFlags": [
|
||||
{
|
||||
"id": "oms.order-list.exception-summary-v2",
|
||||
"screenId": "OMS-ORD-001",
|
||||
"surface": "information-emphasis",
|
||||
"description": "기존 주문 Quick Filter를 이동시키지 않고 확인 필요 예외 요약을 보조적으로 노출하는 되돌릴 수 있는 UX 변경",
|
||||
"defaultVariant": "control",
|
||||
"killSwitch": true,
|
||||
"owner": "KBX"
|
||||
}
|
||||
],
|
||||
"experiments": [
|
||||
{
|
||||
"id": "exp.oms.order-list.exception-summary-v2",
|
||||
"flagId": "oms.order-list.exception-summary-v2",
|
||||
"screenId": "OMS-ORD-001",
|
||||
"state": "draft",
|
||||
"rolloutPercent": 0,
|
||||
"minExposurePerVariant": 200,
|
||||
"variants": [
|
||||
{
|
||||
"key": "control",
|
||||
"weight": 50
|
||||
},
|
||||
{
|
||||
"key": "exception-summary",
|
||||
"weight": 50
|
||||
}
|
||||
],
|
||||
"primaryMetric": {
|
||||
"key": "semantic_interactions_per_task",
|
||||
"direction": "lower",
|
||||
"minimumImprovementPercent": 10
|
||||
},
|
||||
"guardrails": [
|
||||
{
|
||||
"key": "task_completion_time_ms",
|
||||
"statistic": "p95",
|
||||
"maxRegressionPercent": 20
|
||||
},
|
||||
{
|
||||
"key": "validation_failure_rate",
|
||||
"statistic": "rate",
|
||||
"maxAbsoluteRegressionPercentagePoints": 2
|
||||
}
|
||||
],
|
||||
"globalGuardrails": [
|
||||
{
|
||||
"key": "manual_intervention_rate",
|
||||
"maxAbsoluteRegressionPercentagePoints": 0.5
|
||||
}
|
||||
],
|
||||
"notes": "Reference experiment only. v17 ships at draft/0%; rollout requires an explicit runtime decision and can be killed immediately."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,695 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"source": "contracts/fields/kbx.fields.json",
|
||||
"sourceSha256": "9720246fe70ca49effd9e1e86fb580c624797cce68e71f35ad5e1b42f6263521",
|
||||
"count": 50,
|
||||
"fields": [
|
||||
{
|
||||
"key": "address1",
|
||||
"label": "주소",
|
||||
"aliases": [
|
||||
"기본주소",
|
||||
"배송주소",
|
||||
"Address1"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "address2",
|
||||
"label": "상세주소",
|
||||
"aliases": [
|
||||
"주소2",
|
||||
"Address2"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "allocatedQty",
|
||||
"label": "할당수량",
|
||||
"aliases": [
|
||||
"AllocatedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "amount",
|
||||
"label": "금액",
|
||||
"aliases": [
|
||||
"Amount",
|
||||
"주문금액"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 2,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "availableQty",
|
||||
"label": "가용재고",
|
||||
"aliases": [
|
||||
"AvailableQty",
|
||||
"출고가능수량"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "barcode",
|
||||
"label": "바코드",
|
||||
"aliases": [
|
||||
"Barcode",
|
||||
"EAN",
|
||||
"JAN"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelId",
|
||||
"label": "판매채널ID",
|
||||
"aliases": [
|
||||
"ChannelId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "salesChannel",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "channelName",
|
||||
"label": "판매채널",
|
||||
"aliases": [
|
||||
"ChannelName",
|
||||
"채널"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdAt",
|
||||
"label": "등록일시",
|
||||
"aliases": [
|
||||
"CreatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "createdBy",
|
||||
"label": "등록자",
|
||||
"aliases": [
|
||||
"CreatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerCode",
|
||||
"label": "거래처코드",
|
||||
"aliases": [
|
||||
"거래처",
|
||||
"업체코드",
|
||||
"CustomerCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "customer",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerId",
|
||||
"label": "거래처ID",
|
||||
"aliases": [
|
||||
"CustomerId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "customer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "customerName",
|
||||
"label": "거래처명",
|
||||
"aliases": [
|
||||
"CustomerName",
|
||||
"업체명"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "damagedQty",
|
||||
"label": "불량수량",
|
||||
"aliases": [
|
||||
"DamagedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "exceptionCount",
|
||||
"label": "예외건수",
|
||||
"aliases": [
|
||||
"ExceptionCount",
|
||||
"오류건수"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "expiryDate",
|
||||
"label": "유통기한",
|
||||
"aliases": [
|
||||
"ExpiryDate",
|
||||
"ExpirationDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "holdQty",
|
||||
"label": "보류수량",
|
||||
"aliases": [
|
||||
"HoldQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemCode",
|
||||
"label": "품목코드",
|
||||
"aliases": [
|
||||
"상품코드",
|
||||
"SKU",
|
||||
"ItemCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "item",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemId",
|
||||
"label": "품목ID",
|
||||
"aliases": [
|
||||
"ItemId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "item",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemName",
|
||||
"label": "품목명",
|
||||
"aliases": [
|
||||
"상품명",
|
||||
"ItemName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 300,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "itemSummary",
|
||||
"label": "대표상품",
|
||||
"aliases": [
|
||||
"ItemSummary"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationCode",
|
||||
"label": "로케이션",
|
||||
"aliases": [
|
||||
"Location",
|
||||
"LocationCode",
|
||||
"위치"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 80,
|
||||
"lookupEntity": "location",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "locationId",
|
||||
"label": "로케이션ID",
|
||||
"aliases": [
|
||||
"LocationId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "location",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "lotNo",
|
||||
"label": "LOT",
|
||||
"aliases": [
|
||||
"LotNo",
|
||||
"LOT번호"
|
||||
],
|
||||
"dataType": "code",
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "occurredAt",
|
||||
"label": "발생시각",
|
||||
"aliases": [
|
||||
"OccurredAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "onHandQty",
|
||||
"label": "현재고",
|
||||
"aliases": [
|
||||
"OnHandQty",
|
||||
"장부재고"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderDate",
|
||||
"label": "주문일",
|
||||
"aliases": [
|
||||
"주문일자",
|
||||
"OrderDate"
|
||||
],
|
||||
"dataType": "date",
|
||||
"required": true,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderedAt",
|
||||
"label": "주문일시",
|
||||
"aliases": [
|
||||
"OrderedAt",
|
||||
"주문시간"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderId",
|
||||
"label": "주문ID",
|
||||
"aliases": [
|
||||
"OrderId"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderNo",
|
||||
"label": "주문번호",
|
||||
"aliases": [
|
||||
"OrderNo",
|
||||
"주문ID"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "orderQty",
|
||||
"label": "주문수량",
|
||||
"aliases": [
|
||||
"주문수량",
|
||||
"수량",
|
||||
"Qty",
|
||||
"OrderQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false,
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"key": "ownerName",
|
||||
"label": "담당자",
|
||||
"aliases": [
|
||||
"OwnerName",
|
||||
"담당"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 100,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "phone",
|
||||
"label": "연락처",
|
||||
"aliases": [
|
||||
"휴대폰",
|
||||
"전화번호",
|
||||
"Phone"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "phone"
|
||||
},
|
||||
{
|
||||
"key": "pickedQty",
|
||||
"label": "피킹수량",
|
||||
"aliases": [
|
||||
"PickedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "postalCode",
|
||||
"label": "우편번호",
|
||||
"aliases": [
|
||||
"ZipCode",
|
||||
"PostalCode"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 20,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "address"
|
||||
},
|
||||
{
|
||||
"key": "quantity",
|
||||
"label": "수량",
|
||||
"aliases": [
|
||||
"Qty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "receiverName",
|
||||
"label": "수취인",
|
||||
"aliases": [
|
||||
"받는분",
|
||||
"수령인",
|
||||
"ReceiverName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"required": true,
|
||||
"maxLength": 100,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": true,
|
||||
"masking": "name"
|
||||
},
|
||||
{
|
||||
"key": "referenceNo",
|
||||
"label": "참조번호",
|
||||
"aliases": [
|
||||
"ReferenceNo"
|
||||
],
|
||||
"dataType": "code",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "remark",
|
||||
"label": "비고",
|
||||
"aliases": [
|
||||
"메모",
|
||||
"배송메모",
|
||||
"Remark"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 500,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "shippedQty",
|
||||
"label": "출고수량",
|
||||
"aliases": [
|
||||
"ShippedQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "specification",
|
||||
"label": "규격",
|
||||
"aliases": [
|
||||
"Specification",
|
||||
"Spec"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "status",
|
||||
"label": "상태",
|
||||
"aliases": [
|
||||
"Status"
|
||||
],
|
||||
"dataType": "status",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "totalQty",
|
||||
"label": "총수량",
|
||||
"aliases": [
|
||||
"TotalQty"
|
||||
],
|
||||
"dataType": "quantity",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "unitPrice",
|
||||
"label": "단가",
|
||||
"aliases": [
|
||||
"판매단가",
|
||||
"UnitPrice"
|
||||
],
|
||||
"dataType": "money",
|
||||
"precision": 18,
|
||||
"scale": 4,
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedAt",
|
||||
"label": "수정일시",
|
||||
"aliases": [
|
||||
"UpdatedAt"
|
||||
],
|
||||
"dataType": "datetime",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "updatedBy",
|
||||
"label": "수정자",
|
||||
"aliases": [
|
||||
"UpdatedBy"
|
||||
],
|
||||
"dataType": "text",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "version",
|
||||
"label": "버전",
|
||||
"aliases": [
|
||||
"Version",
|
||||
"RowVersion"
|
||||
],
|
||||
"dataType": "integer",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseCode",
|
||||
"label": "창고코드",
|
||||
"aliases": [
|
||||
"창고",
|
||||
"창고코드",
|
||||
"출고창고",
|
||||
"WarehouseCode"
|
||||
],
|
||||
"dataType": "code",
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"lookupEntity": "warehouse",
|
||||
"importable": true,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseId",
|
||||
"label": "창고ID",
|
||||
"aliases": [
|
||||
"WarehouseId"
|
||||
],
|
||||
"dataType": "lookup",
|
||||
"lookupEntity": "warehouse",
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": false,
|
||||
"sensitive": false
|
||||
},
|
||||
{
|
||||
"key": "warehouseName",
|
||||
"label": "창고명",
|
||||
"aliases": [
|
||||
"WarehouseName"
|
||||
],
|
||||
"dataType": "text",
|
||||
"maxLength": 200,
|
||||
"readonly": true,
|
||||
"importable": false,
|
||||
"exportable": true,
|
||||
"sensitive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"integrationVersion": "1.0.0",
|
||||
"sourceSha256": "607853e43ab35fdacc1adea7d5b470dfad791f6718afba215b5600c974b0642e",
|
||||
"principles": {
|
||||
"businessStateSeparatedFromIntegrationState": true,
|
||||
"atLeastOnceRequiresIdempotency": true,
|
||||
"transientRetryOnly": true,
|
||||
"hangfireOwnsLongRetry": true,
|
||||
"pollyOwnsShortTransientResilience": true,
|
||||
"signalRIsNotSourceOfTruth": true,
|
||||
"terminalFailuresCreateOperationsException": true,
|
||||
"userNeverNeedsToRepeatBusinessCommandForIntegrationFailure": true
|
||||
},
|
||||
"states": [
|
||||
"queued",
|
||||
"delivering",
|
||||
"retrying",
|
||||
"delivered",
|
||||
"failed",
|
||||
"suspended"
|
||||
],
|
||||
"integrations": [
|
||||
{
|
||||
"id": "integration.oms.wms.dispatch",
|
||||
"title": "OMS → WMS 출고지시 전달",
|
||||
"ownerModule": "OMS",
|
||||
"direction": "outbound",
|
||||
"transport": "outbox-http",
|
||||
"criticality": "high",
|
||||
"sourceEvent": "OrderShipmentRequested",
|
||||
"target": "WMS",
|
||||
"delivery": "at-least-once",
|
||||
"ordering": "per-aggregate",
|
||||
"idempotency": "event-id",
|
||||
"timeoutMs": 3000,
|
||||
"shortRetry": {
|
||||
"maxRetryAttempts": 2,
|
||||
"baseDelayMs": 250,
|
||||
"backoff": "exponential"
|
||||
},
|
||||
"longRetry": {
|
||||
"scheduler": "hangfire",
|
||||
"maxAttempts": 8,
|
||||
"scheduleSeconds": [
|
||||
10,
|
||||
30,
|
||||
120,
|
||||
300,
|
||||
900,
|
||||
1800,
|
||||
3600,
|
||||
7200
|
||||
]
|
||||
},
|
||||
"circuitBreaker": {
|
||||
"failureRatio": 0.5,
|
||||
"samplingSeconds": 30,
|
||||
"minimumThroughput": 10,
|
||||
"breakSeconds": 30
|
||||
},
|
||||
"retryable": [
|
||||
"network",
|
||||
"timeout",
|
||||
"http-408",
|
||||
"http-429",
|
||||
"http-5xx",
|
||||
"circuit-open"
|
||||
],
|
||||
"permanent": [
|
||||
"contract-invalid",
|
||||
"http-400",
|
||||
"http-401",
|
||||
"http-403",
|
||||
"http-404",
|
||||
"domain-rejected"
|
||||
],
|
||||
"terminalAction": "operations-exception",
|
||||
"userVisible": true
|
||||
},
|
||||
{
|
||||
"id": "integration.wms.oms.picking-result",
|
||||
"title": "WMS → OMS 피킹결과 전달",
|
||||
"ownerModule": "WMS",
|
||||
"direction": "outbound",
|
||||
"transport": "outbox-http",
|
||||
"criticality": "high",
|
||||
"sourceEvent": "PickingCompleted",
|
||||
"target": "OMS",
|
||||
"delivery": "at-least-once",
|
||||
"ordering": "per-aggregate",
|
||||
"idempotency": "event-id",
|
||||
"timeoutMs": 3000,
|
||||
"shortRetry": {
|
||||
"maxRetryAttempts": 2,
|
||||
"baseDelayMs": 250,
|
||||
"backoff": "exponential"
|
||||
},
|
||||
"longRetry": {
|
||||
"scheduler": "hangfire",
|
||||
"maxAttempts": 8,
|
||||
"scheduleSeconds": [
|
||||
10,
|
||||
30,
|
||||
120,
|
||||
300,
|
||||
900,
|
||||
1800,
|
||||
3600,
|
||||
7200
|
||||
]
|
||||
},
|
||||
"circuitBreaker": {
|
||||
"failureRatio": 0.5,
|
||||
"samplingSeconds": 30,
|
||||
"minimumThroughput": 10,
|
||||
"breakSeconds": 30
|
||||
},
|
||||
"retryable": [
|
||||
"network",
|
||||
"timeout",
|
||||
"http-408",
|
||||
"http-429",
|
||||
"http-5xx",
|
||||
"circuit-open"
|
||||
],
|
||||
"permanent": [
|
||||
"contract-invalid",
|
||||
"http-400",
|
||||
"http-401",
|
||||
"http-403",
|
||||
"http-404",
|
||||
"domain-rejected"
|
||||
],
|
||||
"terminalAction": "operations-exception",
|
||||
"userVisible": true
|
||||
},
|
||||
{
|
||||
"id": "integration.carrier.tracking",
|
||||
"title": "배송사 송장/배송상태 연계",
|
||||
"ownerModule": "OMS",
|
||||
"direction": "outbound",
|
||||
"transport": "outbox-http",
|
||||
"criticality": "medium",
|
||||
"sourceEvent": "TrackingSubmissionRequested",
|
||||
"target": "CarrierGateway",
|
||||
"delivery": "at-least-once",
|
||||
"ordering": "none",
|
||||
"idempotency": "business-key",
|
||||
"timeoutMs": 5000,
|
||||
"shortRetry": {
|
||||
"maxRetryAttempts": 2,
|
||||
"baseDelayMs": 500,
|
||||
"backoff": "exponential"
|
||||
},
|
||||
"longRetry": {
|
||||
"scheduler": "hangfire",
|
||||
"maxAttempts": 6,
|
||||
"scheduleSeconds": [
|
||||
30,
|
||||
120,
|
||||
600,
|
||||
1800,
|
||||
3600,
|
||||
7200
|
||||
]
|
||||
},
|
||||
"circuitBreaker": {
|
||||
"failureRatio": 0.5,
|
||||
"samplingSeconds": 60,
|
||||
"minimumThroughput": 10,
|
||||
"breakSeconds": 60
|
||||
},
|
||||
"retryable": [
|
||||
"network",
|
||||
"timeout",
|
||||
"http-408",
|
||||
"http-429",
|
||||
"http-5xx",
|
||||
"circuit-open"
|
||||
],
|
||||
"permanent": [
|
||||
"contract-invalid",
|
||||
"http-400",
|
||||
"http-401",
|
||||
"http-403",
|
||||
"http-404",
|
||||
"domain-rejected"
|
||||
],
|
||||
"terminalAction": "operations-exception",
|
||||
"userVisible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
[
|
||||
{
|
||||
"screenId": "OMS-ORD-001",
|
||||
"path": "/oms/orders",
|
||||
"section": "주문",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-002",
|
||||
"path": "/oms/orders/new",
|
||||
"section": "주문",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-ORD-003",
|
||||
"path": "/oms/orders/import",
|
||||
"section": "주문",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "OMS-CLM-001",
|
||||
"path": "/oms/claims",
|
||||
"section": "CS/클레임",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-MST-ITEM-001",
|
||||
"path": "/erp/items",
|
||||
"section": "기준정보",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-PUR-001",
|
||||
"path": "/erp/purchases/new",
|
||||
"section": "구매",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-001",
|
||||
"path": "/erp/inventory",
|
||||
"section": "재고",
|
||||
"order": 30
|
||||
},
|
||||
{
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"path": "/erp/inventory-moves/new",
|
||||
"section": "재고",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"screenId": "WMS-WORK-001",
|
||||
"path": "/wms/work",
|
||||
"section": "작업관리",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"path": "/operations/exceptions",
|
||||
"section": "운영",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-REC-001",
|
||||
"path": "/operations/reconcile",
|
||||
"section": "운영",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-EXP-001",
|
||||
"path": "/internal/kbx/experiments",
|
||||
"section": "KBX",
|
||||
"order": 75
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-UX-001",
|
||||
"path": "/internal/kbx/ux-metrics",
|
||||
"section": "KBX",
|
||||
"order": 80
|
||||
},
|
||||
{
|
||||
"screenId": "COMMON-DS-001",
|
||||
"path": "/internal/kbx/catalog",
|
||||
"section": "KBX",
|
||||
"order": 90
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,486 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"permissionVersion": "1.3.0",
|
||||
"permissions": [
|
||||
{
|
||||
"id": "common.ai.use",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "use",
|
||||
"risk": "medium",
|
||||
"description": "AI 설명·추천·초안 기능 사용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ai.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "ai",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "AI 승인 제안의 실제 Command 실행 허용",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.claim",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "claim",
|
||||
"risk": "medium",
|
||||
"description": "업무 예외를 내 처리건으로 지정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.create",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "대사 결과에서 운영 예외 생성",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.read",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 예외 센터 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.resolve",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "resolve",
|
||||
"risk": "high",
|
||||
"description": "수동 해결이 허용된 운영 예외 해결",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.operations.retry",
|
||||
"module": "COMMON",
|
||||
"resource": "operations",
|
||||
"action": "retry",
|
||||
"risk": "high",
|
||||
"description": "등록된 안전한 예외 Action 재처리",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.reconcile.read",
|
||||
"module": "COMMON",
|
||||
"resource": "reconcile",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 데이터 대사 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.runtime.read",
|
||||
"module": "COMMON",
|
||||
"resource": "runtime",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "런타임 상태·작업·알림 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.suggestion.create",
|
||||
"module": "COMMON",
|
||||
"resource": "suggestion",
|
||||
"action": "create",
|
||||
"risk": "low",
|
||||
"description": "현재 화면 사용자 제안 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "재고이동 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고이동 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.receive",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "receive",
|
||||
"risk": "high",
|
||||
"description": "이동재고 입고완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.ship",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "이동재고 출고",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.move.write",
|
||||
"module": "ERP",
|
||||
"resource": "inventory-move",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "재고이동 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.inventory.read",
|
||||
"module": "ERP",
|
||||
"resource": "inventory",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "재고현황 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.create",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "품목 신규·복사",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.read",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "품목 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.item.write",
|
||||
"module": "ERP",
|
||||
"resource": "item",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "품목 수정·사용중지",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.cancel",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "cancel",
|
||||
"risk": "high",
|
||||
"description": "구매 취소",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.confirm",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "confirm",
|
||||
"risk": "high",
|
||||
"description": "구매 확정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.read",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "구매 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "erp.purchase.write",
|
||||
"module": "ERP",
|
||||
"resource": "purchase",
|
||||
"action": "write",
|
||||
"risk": "medium",
|
||||
"description": "구매 작성·수정",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "imports.execute",
|
||||
"module": "COMMON",
|
||||
"resource": "imports",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "Excel Import 생성·검증·반영",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "kbx.design.read",
|
||||
"module": "COMMON",
|
||||
"resource": "design-system",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX 내부 컴포넌트 카탈로그 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.approve",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "approve",
|
||||
"risk": "high",
|
||||
"description": "클레임 승인",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.hold",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "hold",
|
||||
"risk": "medium",
|
||||
"description": "클레임 보류",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.process",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "process",
|
||||
"risk": "high",
|
||||
"description": "클레임 처리 시작·완료",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.claim.read",
|
||||
"module": "OMS",
|
||||
"resource": "claim",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "반품·클레임 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.create",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "create",
|
||||
"risk": "medium",
|
||||
"description": "주문 신규 등록",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.import",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "import",
|
||||
"risk": "high",
|
||||
"description": "주문 Excel Import 실행",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.read",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "주문 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.ship",
|
||||
"module": "OMS",
|
||||
"resource": "order",
|
||||
"action": "ship",
|
||||
"risk": "high",
|
||||
"description": "주문 출고지시",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.unmask",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-read",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 전체보기",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "oms.order.recipient.export",
|
||||
"module": "OMS",
|
||||
"resource": "order-recipient",
|
||||
"action": "sensitive-export",
|
||||
"risk": "high",
|
||||
"description": "주문 수취인 개인정보 비마스킹 Export",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.inventory.count",
|
||||
"module": "WMS",
|
||||
"resource": "inventory",
|
||||
"action": "count",
|
||||
"risk": "high",
|
||||
"description": "현장 재고실사 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.picking.execute",
|
||||
"module": "WMS",
|
||||
"resource": "picking",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "출고 피킹 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.putaway.execute",
|
||||
"module": "WMS",
|
||||
"resource": "putaway",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 적치 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.receiving.execute",
|
||||
"module": "WMS",
|
||||
"resource": "receiving",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "입고 검수 작업 실행",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.execute",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "execute",
|
||||
"risk": "high",
|
||||
"description": "WMS 작업 시작",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "wms.work.read",
|
||||
"module": "WMS",
|
||||
"resource": "work",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "WMS 작업 Queue 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.telemetry.write",
|
||||
"module": "COMMON",
|
||||
"resource": "telemetry",
|
||||
"action": "write",
|
||||
"risk": "low",
|
||||
"description": "민감정보를 포함하지 않는 KBX 의미 단위 UX Telemetry 전송",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.ux.read",
|
||||
"module": "COMMON",
|
||||
"resource": "ux-metrics",
|
||||
"action": "read",
|
||||
"risk": "medium",
|
||||
"description": "KBX UX 품질·자동화 지표 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.evaluate",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "evaluate",
|
||||
"risk": "low",
|
||||
"description": "현재 사용자에 대한 안전한 UX 실험 Variant 평가",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.read",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "KBX UX 실험·점진배포 상태 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.experiment.manage",
|
||||
"module": "COMMON",
|
||||
"resource": "experiment",
|
||||
"action": "manage",
|
||||
"risk": "high",
|
||||
"description": "UX 실험 점진배포 비율 변경·일시중지·즉시 롤백",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.integration.read",
|
||||
"module": "COMMON",
|
||||
"resource": "integration",
|
||||
"action": "read",
|
||||
"risk": "low",
|
||||
"description": "업무 외부연계 상태·시도 이력 조회",
|
||||
"presentation": "hide",
|
||||
"backendRequired": true
|
||||
},
|
||||
{
|
||||
"id": "common.integration.retry",
|
||||
"module": "COMMON",
|
||||
"resource": "integration",
|
||||
"action": "retry",
|
||||
"risk": "high",
|
||||
"description": "최종 실패한 idempotent 외부연계의 수동 재처리 예약",
|
||||
"presentation": "disable",
|
||||
"backendRequired": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"sourceSha256": "5c06fd380f07e56e7e0188cce405dfaf2c1a2361a2d3526237c96e8a6802cd42",
|
||||
"types": [
|
||||
"validation",
|
||||
"business-rule",
|
||||
"conflict",
|
||||
"permission",
|
||||
"not-found",
|
||||
"integration",
|
||||
"system"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
[
|
||||
{
|
||||
"id": "COMMON-DS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "KBX 컴포넌트 카탈로그",
|
||||
"helpKey": "COMMON-DS-001",
|
||||
"requiredPermissions": [
|
||||
"kbx.design.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/design-system/design-system.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-EXP-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "UX 실험·점진배포",
|
||||
"helpKey": "COMMON-EXP-001",
|
||||
"requiredPermissions": [
|
||||
"common.experiment.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/experiments/experiments.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-OPS-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "queue",
|
||||
"title": "업무 예외 센터",
|
||||
"helpKey": "COMMON-OPS-001",
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/operations/operations.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "reconcile",
|
||||
"title": "업무 데이터 대사",
|
||||
"helpKey": "COMMON-REC-001",
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/reconcile/reconcile.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "COMMON-UX-001",
|
||||
"version": "1.0.0",
|
||||
"module": "COMMON",
|
||||
"type": "list",
|
||||
"title": "UX 품질 지표",
|
||||
"helpKey": "COMMON-UX-001",
|
||||
"requiredPermissions": [
|
||||
"common.ux.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/common/ux-metrics/ux-metrics.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master-detail",
|
||||
"title": "재고현황",
|
||||
"helpKey": "ERP-INV-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory/inventory.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-INV-MOVE-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "재고이동",
|
||||
"helpKey": "ERP-INV-MOVE-001",
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-MST-ITEM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "master",
|
||||
"title": "품목관리",
|
||||
"helpKey": "ERP-MST-ITEM-001",
|
||||
"requiredPermissions": [
|
||||
"erp.item.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/items/item.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "ERP-PUR-001",
|
||||
"version": "1.0.0",
|
||||
"module": "ERP",
|
||||
"type": "transaction",
|
||||
"title": "구매등록",
|
||||
"helpKey": "ERP-PUR-001",
|
||||
"requiredPermissions": [
|
||||
"erp.purchase.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/erp/purchases/purchase.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-CLM-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "반품·클레임 관리",
|
||||
"helpKey": "OMS-CLM-001",
|
||||
"requiredPermissions": [
|
||||
"oms.claim.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/claims/claims.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-001",
|
||||
"version": "1.0.0",
|
||||
"module": "OMS",
|
||||
"type": "list",
|
||||
"title": "주문관리",
|
||||
"helpKey": "OMS-ORD-001",
|
||||
"requiredPermissions": [
|
||||
"oms.order.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/search/order-list.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-002",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "transaction",
|
||||
"title": "주문등록",
|
||||
"helpKey": "OMS-ORD-002",
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/register/order-register.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "OMS-ORD-003",
|
||||
"version": "1.1.0",
|
||||
"module": "OMS",
|
||||
"type": "import",
|
||||
"title": "주문 Excel 업로드",
|
||||
"helpKey": "OMS-ORD-003",
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"source": "apps/web/src/modules/oms/orders/import/order-import.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-COUNT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "재고실사",
|
||||
"helpKey": "WMS-COUNT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.inventory.count"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/counting/counting.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PICK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "출고 피킹",
|
||||
"helpKey": "WMS-PICK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/picking/picking.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-PUT-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 적치",
|
||||
"helpKey": "WMS-PUT-001",
|
||||
"requiredPermissions": [
|
||||
"wms.putaway.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/putaway/putaway.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-REC-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "wms-mobile",
|
||||
"title": "입고 검수",
|
||||
"helpKey": "WMS-REC-001",
|
||||
"requiredPermissions": [
|
||||
"wms.receiving.execute"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/receiving/receiving.definition.ts"
|
||||
},
|
||||
{
|
||||
"id": "WMS-WORK-001",
|
||||
"version": "1.0.0",
|
||||
"module": "WMS",
|
||||
"type": "queue",
|
||||
"title": "물류 작업",
|
||||
"helpKey": "WMS-WORK-001",
|
||||
"requiredPermissions": [
|
||||
"wms.work.read"
|
||||
],
|
||||
"source": "apps/web/src/modules/wms/work/work.definition.ts"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"policies": [
|
||||
{
|
||||
"id": "oms.order.recipient",
|
||||
"fields": [
|
||||
"receiverName",
|
||||
"phone",
|
||||
"postalCode",
|
||||
"address1",
|
||||
"address2"
|
||||
],
|
||||
"defaultExposure": "masked",
|
||||
"viewPermission": "oms.order.read",
|
||||
"revealPermission": "oms.order.recipient.unmask",
|
||||
"unmaskedExportPermission": "oms.order.recipient.export",
|
||||
"auditRequired": true,
|
||||
"aiExposure": "masked-only",
|
||||
"telemetryExposure": "never",
|
||||
"reasonRequired": false
|
||||
}
|
||||
],
|
||||
"ai": {
|
||||
"usePermission": "common.ai.use",
|
||||
"executePermission": "common.ai.execute",
|
||||
"executeRequiresProposalPermission": true,
|
||||
"defaultCapabilities": [
|
||||
"explain",
|
||||
"suggest",
|
||||
"draft"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,294 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"telemetryVersion": "1.1.0",
|
||||
"sourceSha256": "9f5de69498b657cb0d60df18c1e98c504a44eec555c4fc50d46f15f83a4ea1ce",
|
||||
"principles": {
|
||||
"purpose": "ux-improvement-and-operational-diagnosis",
|
||||
"noRawBusinessData": true,
|
||||
"noSensitiveData": true,
|
||||
"noDomClickSpying": true,
|
||||
"semanticEventsOnly": true,
|
||||
"rawRetentionDays": 90,
|
||||
"dailyAggregateRetentionMonths": 13
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"name": "screen.open",
|
||||
"category": "navigation",
|
||||
"description": "화면 진입",
|
||||
"allowedAttributes": [
|
||||
"module",
|
||||
"launchMode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "screen.close",
|
||||
"category": "navigation",
|
||||
"description": "화면 종료",
|
||||
"allowedAttributes": [
|
||||
"module",
|
||||
"closeReason"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "task.start",
|
||||
"category": "task",
|
||||
"description": "측정 가능한 업무 Task 시작",
|
||||
"allowedAttributes": [
|
||||
"taskType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "task.complete",
|
||||
"category": "task",
|
||||
"description": "업무 Task 정상 완료",
|
||||
"allowedAttributes": [
|
||||
"taskType",
|
||||
"result"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "task.abandon",
|
||||
"category": "task",
|
||||
"description": "업무 Task 중단",
|
||||
"allowedAttributes": [
|
||||
"taskType",
|
||||
"reasonCode"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "interaction.execute",
|
||||
"category": "interaction",
|
||||
"description": "KBX 의미 단위 업무 조작 실행",
|
||||
"allowedAttributes": [
|
||||
"interactionType",
|
||||
"commandId"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "search.execute",
|
||||
"category": "interaction",
|
||||
"description": "조회 실행",
|
||||
"allowedAttributes": [
|
||||
"resultBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command.execute",
|
||||
"category": "command",
|
||||
"description": "업무 Command 실행 시도",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"operationKind"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command.succeeded",
|
||||
"category": "command",
|
||||
"description": "업무 Command 성공",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"operationKind"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "command.failed",
|
||||
"category": "command",
|
||||
"description": "업무 Command 실패",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"problemType",
|
||||
"reasonCode"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "lookup.open",
|
||||
"category": "lookup",
|
||||
"description": "Lookup 열기",
|
||||
"allowedAttributes": [
|
||||
"entityType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "lookup.select",
|
||||
"category": "lookup",
|
||||
"description": "Lookup 선택 완료",
|
||||
"allowedAttributes": [
|
||||
"entityType",
|
||||
"selectionSource"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "grid.bulk_action",
|
||||
"category": "interaction",
|
||||
"description": "Grid 일괄처리 실행",
|
||||
"allowedAttributes": [
|
||||
"commandId",
|
||||
"countBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "validation.failed",
|
||||
"category": "quality",
|
||||
"description": "저장/업무 실행 전후 검증 실패",
|
||||
"allowedAttributes": [
|
||||
"stage",
|
||||
"errorCountBucket",
|
||||
"reasonCode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "excel.import.start",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 시작",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"rowCountBucket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "excel.import.completed",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 완료",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"result",
|
||||
"rowCountBucket"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "excel.import.failed",
|
||||
"category": "excel",
|
||||
"description": "Excel Import 실패",
|
||||
"allowedAttributes": [
|
||||
"importType",
|
||||
"reasonCode",
|
||||
"rowCountBucket"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "exception.open",
|
||||
"category": "exception",
|
||||
"description": "업무 예외 생성/노출",
|
||||
"allowedAttributes": [
|
||||
"exceptionType",
|
||||
"severity"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "exception.resolved",
|
||||
"category": "exception",
|
||||
"description": "업무 예외 해결",
|
||||
"allowedAttributes": [
|
||||
"exceptionType",
|
||||
"resolutionType"
|
||||
],
|
||||
"requiresDuration": true
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.open",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 확인",
|
||||
"allowedAttributes": [
|
||||
"proposalType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.accept",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 승인",
|
||||
"allowedAttributes": [
|
||||
"proposalType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ai.proposal.reject",
|
||||
"category": "ai",
|
||||
"description": "AI 제안 거절",
|
||||
"allowedAttributes": [
|
||||
"proposalType",
|
||||
"reasonCode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "manual.intervention",
|
||||
"category": "outcome",
|
||||
"description": "정상 자동처리 대신 사람의 확인/수정/판단이 필요했던 업무",
|
||||
"allowedAttributes": [
|
||||
"workType",
|
||||
"reasonCode",
|
||||
"exceptionType"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "experiment.exposed",
|
||||
"category": "experiment",
|
||||
"description": "실험 Variant가 실제 화면에 렌더링되어 사용자에게 노출됨",
|
||||
"allowedAttributes": [
|
||||
"surface"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metrics": [
|
||||
{
|
||||
"key": "task_completion_time_ms",
|
||||
"label": "Task Completion Time",
|
||||
"numerator": "task.complete.duration_ms",
|
||||
"aggregation": "p50,p95",
|
||||
"unit": "ms"
|
||||
},
|
||||
{
|
||||
"key": "semantic_interactions_per_task",
|
||||
"label": "Interactions / Task",
|
||||
"numerator": "interaction.execute",
|
||||
"denominator": "task.complete",
|
||||
"aggregation": "ratio",
|
||||
"unit": "count"
|
||||
},
|
||||
{
|
||||
"key": "manual_intervention_rate",
|
||||
"label": "Manual Intervention Rate",
|
||||
"numerator": "ux_business_outcomes.manual_intervention_count",
|
||||
"denominator": "ux_business_outcomes.observed_count",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "validation_failure_rate",
|
||||
"label": "Validation Failure Rate",
|
||||
"numerator": "validation.failed",
|
||||
"denominator": "command.execute",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "import_failure_rate",
|
||||
"label": "Import Failure Rate",
|
||||
"numerator": "excel.import.failed",
|
||||
"denominator": "excel.import.start",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
},
|
||||
{
|
||||
"key": "exception_resolution_time_ms",
|
||||
"label": "Exception Resolution Time",
|
||||
"numerator": "exception.resolved.duration_ms",
|
||||
"aggregation": "p50,p95",
|
||||
"unit": "ms"
|
||||
},
|
||||
{
|
||||
"key": "ai_proposal_acceptance_rate",
|
||||
"label": "AI Proposal Acceptance Rate",
|
||||
"numerator": "ai.proposal.accept",
|
||||
"denominator": "ai.proposal.open",
|
||||
"aggregation": "ratio",
|
||||
"unit": "percent"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"fixtureVersion": "1.1.0",
|
||||
"sourceSha256": "d70fd432ac213ad36fcc639335c29516d6705aa67039a0423837ae6abd003663",
|
||||
"syntheticOnly": true,
|
||||
"fixedReferenceClock": "2026-08-08T09:00:00Z",
|
||||
"testTenant": {
|
||||
"id": "11111111-1111-4111-8111-111111111111",
|
||||
"key": "KBX-TEST-TENANT"
|
||||
},
|
||||
"fixtureSets": [
|
||||
{
|
||||
"id": "fixture.oms.orders.bulk-ship",
|
||||
"description": "출고 가능 2건 + 이미 완료되어 거부될 1건",
|
||||
"refs": [
|
||||
"order.ship.ready.1",
|
||||
"order.ship.ready.2",
|
||||
"order.ship.rejected.1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.oms.order-register",
|
||||
"description": "거래처/창고/품목 Lookup 입력용",
|
||||
"refs": [
|
||||
"customer.test.1",
|
||||
"warehouse.seoul",
|
||||
"item.shoe.black270"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.oms.order-conflict",
|
||||
"description": "version=7 주문 한 건",
|
||||
"refs": [
|
||||
"order.conflict.1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.oms.order-import",
|
||||
"description": "6행 합성 Excel Import",
|
||||
"refs": [
|
||||
"file.order-import.6rows"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.wms.picking",
|
||||
"description": "A-03-02 위치 피킹 2개 필요",
|
||||
"refs": [
|
||||
"task.pick.1",
|
||||
"scan.location.a0302",
|
||||
"scan.item.shoe",
|
||||
"scan.item.wrong"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.common.operations",
|
||||
"description": "sourceVersion 10→11→10 순서 검증",
|
||||
"refs": [
|
||||
"event.stock-shortage.v10",
|
||||
"event.stock-recovered.v11"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.common.reconcile",
|
||||
"description": "OMS 10 / WMS 8 대사",
|
||||
"refs": [
|
||||
"reconcile.oms-wms.pending"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.erp.inventory-move",
|
||||
"description": "정상 이동과 동일창고 오류",
|
||||
"refs": [
|
||||
"move.valid.1",
|
||||
"move.invalid.same-warehouse"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.shell.user",
|
||||
"description": "Workspace 미저장 변경 UI 전용",
|
||||
"refs": [
|
||||
"ui.order.receiver"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.integration.outbox",
|
||||
"description": "외부연계 성공/일시/영구실패와 수동 재처리용 합성 메시지",
|
||||
"refs": [
|
||||
"integration.message.dispatch.1",
|
||||
"integration.message.dispatch.2",
|
||||
"integration.attempt.failed.1",
|
||||
"idem.integration.retry.001"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "fixture.integration.inbox",
|
||||
"description": "동일 Inbox 메시지 중복 수신 검증",
|
||||
"refs": [
|
||||
"integration.inbox.message.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
"refCount": 31
|
||||
}
|
||||
@@ -0,0 +1,407 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"contractVersion": "1.1.0",
|
||||
"sourceSha256": "a5181c0d460e611d04221c1324b6037a989a206b2e3e0c43ae9c320e3bc6559c",
|
||||
"fixtureVersion": "1.1.0",
|
||||
"fixtureSourceSha256": "d70fd432ac213ad36fcc639335c29516d6705aa67039a0423837ae6abd003663",
|
||||
"fixedReferenceClock": "2026-08-08T09:00:00Z",
|
||||
"scenarios": [
|
||||
{
|
||||
"id": "scenario.oms.order-list.bulk-ship",
|
||||
"title": "OMS 주문조회 대량 출고지시 부분성공",
|
||||
"screenId": "OMS-ORD-001",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"golden-screen",
|
||||
"bulk",
|
||||
"idempotency",
|
||||
"audit",
|
||||
"outbox"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.oms.orders.bulk-ship"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.read",
|
||||
"oms.order.ship"
|
||||
],
|
||||
"apiOperations": [
|
||||
"oms.orders.search",
|
||||
"oms.orders.ship"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 7,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"screenshot",
|
||||
"api-transcript",
|
||||
"db-assertions",
|
||||
"correlation-ids"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.oms.order-register.keyboard",
|
||||
"title": "OMS 주문등록 키보드 중심 저장",
|
||||
"screenId": "OMS-ORD-002",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"golden-screen",
|
||||
"keyboard",
|
||||
"lookup",
|
||||
"validation",
|
||||
"audit"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.oms.order-register"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.create",
|
||||
"oms.order.read"
|
||||
],
|
||||
"apiOperations": [
|
||||
"lookup.customers.search",
|
||||
"lookup.items.resolveByCode",
|
||||
"lookup.warehouses.resolveByCode",
|
||||
"oms.orders.register"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 6,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"screenshot",
|
||||
"api-transcript",
|
||||
"db-assertions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.oms.order-register.conflict",
|
||||
"title": "OMS 주문수정 Optimistic Concurrency 충돌",
|
||||
"screenId": "OMS-ORD-002",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"concurrency",
|
||||
"conflict",
|
||||
"recovery"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.oms.order-conflict"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.create",
|
||||
"oms.order.read"
|
||||
],
|
||||
"apiOperations": [
|
||||
"oms.orders.register"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"api-transcript",
|
||||
"db-assertions",
|
||||
"problem-json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.oms.order-import.partial",
|
||||
"title": "OMS 주문 Excel 검증 후 부분 반영",
|
||||
"screenId": "OMS-ORD-003",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"excel",
|
||||
"mapping",
|
||||
"staging",
|
||||
"partial-success",
|
||||
"job"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.oms.order-import"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.import"
|
||||
],
|
||||
"apiOperations": [
|
||||
"common.imports.createSession",
|
||||
"common.imports.validate",
|
||||
"common.imports.commit",
|
||||
"common.imports.getSession"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 7,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"api-transcript",
|
||||
"import-session-snapshot",
|
||||
"error-workbook-metadata",
|
||||
"db-assertions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.wms.picking.idempotent-replay",
|
||||
"title": "WMS 피킹 응답유실 후 동일 Scan Replay",
|
||||
"screenId": "WMS-PICK-001",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"golden-screen",
|
||||
"scanner",
|
||||
"idempotency",
|
||||
"network"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.wms.picking"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"apiOperations": [
|
||||
"wms.picking.getTask",
|
||||
"wms.picking.start",
|
||||
"wms.picking.scan"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"api-transcript",
|
||||
"db-assertions",
|
||||
"scanner-event-log"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.wms.picking.wrong-item",
|
||||
"title": "WMS 다른 상품 Scan은 재시도 Queue 비대상",
|
||||
"screenId": "WMS-PICK-001",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"scanner",
|
||||
"business-error",
|
||||
"retry-policy"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.wms.picking"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"wms.picking.execute"
|
||||
],
|
||||
"apiOperations": [
|
||||
"wms.picking.scan"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"api-transcript",
|
||||
"db-assertions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.common.operations.stale-event",
|
||||
"title": "업무 예외 해결 후 오래된 Event가 재오픈하지 않음",
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"exception",
|
||||
"outbox",
|
||||
"projection",
|
||||
"ordering"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.common.operations"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"common.operations.read",
|
||||
"common.operations.resolve"
|
||||
],
|
||||
"apiOperations": [
|
||||
"common.operations.search"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"db-assertions",
|
||||
"projection-event-log"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.common.reconcile.grace-period",
|
||||
"title": "OMS-WMS 대사 Grace Period 내 Pending 이후 Mismatch",
|
||||
"screenId": "COMMON-REC-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"reconcile",
|
||||
"eventual-consistency"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.common.reconcile"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"common.reconcile.read"
|
||||
],
|
||||
"apiOperations": [
|
||||
"common.reconcile.search"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"db-assertions",
|
||||
"clock-snapshot"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.erp.inventory-move.workflow",
|
||||
"title": "ERP 재고이동 정상 상태전이와 잘못된 창고 차단",
|
||||
"screenId": "ERP-INV-MOVE-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"workflow",
|
||||
"domain-validation",
|
||||
"audit"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.erp.inventory-move"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"erp.inventory.move.read",
|
||||
"erp.inventory.move.write"
|
||||
],
|
||||
"apiOperations": [],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 3,
|
||||
"evidence": [
|
||||
"db-assertions",
|
||||
"workflow-log"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.shell.unsaved-tab",
|
||||
"title": "Workspace Tab 미저장 변경 보호",
|
||||
"screenId": "OMS-ORD-002",
|
||||
"kind": "e2e",
|
||||
"tags": [
|
||||
"shell",
|
||||
"dirty-state",
|
||||
"keyboard"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.shell.user"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"oms.order.create"
|
||||
],
|
||||
"apiOperations": [],
|
||||
"isolation": "ui-only",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"playwright-trace",
|
||||
"screenshot"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.integration.outbox.transient-retry",
|
||||
"title": "Outbox 외부연계 일시 장애 후 자동 재시도",
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"integration",
|
||||
"outbox",
|
||||
"retry",
|
||||
"polly",
|
||||
"hangfire"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.integration.outbox"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"apiOperations": [],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 5,
|
||||
"evidence": [
|
||||
"api-transcript",
|
||||
"db-assertions",
|
||||
"integration-attempt-log",
|
||||
"correlation-ids"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.integration.outbox.permanent-failure",
|
||||
"title": "외부연계 영구 실패가 업무 예외로 승격",
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"integration",
|
||||
"outbox",
|
||||
"permanent-failure",
|
||||
"exception"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.integration.outbox"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"apiOperations": [],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"db-assertions",
|
||||
"integration-attempt-log",
|
||||
"correlation-ids"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.integration.inbox.duplicate",
|
||||
"title": "Inbox 동일 메시지 중복수신 1회 처리",
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"integration",
|
||||
"inbox",
|
||||
"idempotency",
|
||||
"duplicate"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.integration.inbox"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"common.operations.read"
|
||||
],
|
||||
"apiOperations": [],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 4,
|
||||
"evidence": [
|
||||
"db-assertions",
|
||||
"integration-receipt-log",
|
||||
"correlation-ids"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenario.integration.manual-retry.idempotent",
|
||||
"title": "최종 실패 외부연계 수동 재처리 중복 클릭 방지",
|
||||
"screenId": "COMMON-OPS-001",
|
||||
"kind": "integration",
|
||||
"tags": [
|
||||
"integration",
|
||||
"manual-retry",
|
||||
"idempotency"
|
||||
],
|
||||
"fixtureSets": [
|
||||
"fixture.integration.outbox"
|
||||
],
|
||||
"requiredPermissions": [
|
||||
"common.integration.read",
|
||||
"common.integration.retry"
|
||||
],
|
||||
"apiOperations": [
|
||||
"common.integrations.retryAttempt"
|
||||
],
|
||||
"isolation": "database-reset",
|
||||
"assertionCount": 3,
|
||||
"evidence": [
|
||||
"api-transcript",
|
||||
"db-assertions",
|
||||
"correlation-ids"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user