@operato/twin-kernel 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ export type DomainSystem = 'wms' | 'yms' | 'mes';
2
+ export interface DomainProfileInfo {
3
+ system: DomainSystem;
4
+ label: string;
5
+ /** 커널이 키로 쓰는 로케이션 노드 타입(권위 어휘). */
6
+ nodeTypes: readonly string[];
7
+ }
8
+ export declare const DOMAIN_CATALOG: Record<DomainSystem, DomainProfileInfo>;
9
+ export declare const DOMAIN_SYSTEMS: DomainSystem[];
@@ -0,0 +1,14 @@
1
+ /*
2
+ * 도메인 카탈로그 — 시스템(wms/yms/mes)별 어휘 SSOT. 각 프로파일이 선언한 노드 타입을 취합.
3
+ * 호스트(headless-twin)가 이걸 노출하고, UI 는 소싱한다. 앱/UI 는 도메인 어휘를 재선언하지 않는다(방언 금지).
4
+ * bizStep 등 다른 어휘도 이미 프로파일에서 export — 필요 시 여기에 취합.
5
+ */
6
+ import { WMS_NODE_TYPES } from "./wms-profile.js";
7
+ import { YMS_NODE_TYPES } from "./yms-profile.js";
8
+ import { MES_NODE_TYPES } from "./mes-profile.js";
9
+ export const DOMAIN_CATALOG = {
10
+ wms: { system: 'wms', label: 'WMS (물류창고)', nodeTypes: WMS_NODE_TYPES },
11
+ yms: { system: 'yms', label: 'YMS (야드)', nodeTypes: YMS_NODE_TYPES },
12
+ mes: { system: 'mes', label: 'MES (제조)', nodeTypes: MES_NODE_TYPES }
13
+ };
14
+ export const DOMAIN_SYSTEMS = ['wms', 'yms', 'mes'];
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './event-journal.ts';
6
6
  export * from './divergence.ts';
7
7
  export * from './epcis.ts';
8
8
  export * from './wms-profile.ts';
9
+ export * from './domain-catalog.ts';
9
10
  export * from './allocation-policy.ts';
10
11
  export * from './duration-estimator.ts';
11
12
  export * from './state-projector.ts';
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export * from "./event-journal.js";
6
6
  export * from "./divergence.js";
7
7
  export * from "./epcis.js";
8
8
  export * from "./wms-profile.js";
9
+ export * from "./domain-catalog.js";
9
10
  export * from "./allocation-policy.js";
10
11
  export * from "./duration-estimator.js";
11
12
  export * from "./state-projector.js";
@@ -7,3 +7,5 @@ export declare const MES_BIZSTEP: {
7
7
  export declare const BTT_PRODORDER = "urn:epcglobal:cbv:btt:prodorder";
8
8
  /** 직렬 SGTIN URI (원자재 단위·완제품). */
9
9
  export declare function sgtinUri(companyPrefix: string, itemRef: string, serial: number): string;
10
+ /** MES 노드 타입 카탈로그 — 커널이 키로 쓰는 제조 로케이션 타입(nodeByType/.type). 도메인 SSOT. */
11
+ export declare const MES_NODE_TYPES: readonly ["raw-store", "cut-station", "weld-station", "fg-store"];
@@ -15,3 +15,5 @@ export const BTT_PRODORDER = 'urn:epcglobal:cbv:btt:prodorder';
15
15
  export function sgtinUri(companyPrefix, itemRef, serial) {
16
16
  return `urn:epc:id:sgtin:${companyPrefix}.${itemRef}.${serial}`;
17
17
  }
18
+ /** MES 노드 타입 카탈로그 — 커널이 키로 쓰는 제조 로케이션 타입(nodeByType/.type). 도메인 SSOT. */
19
+ export const MES_NODE_TYPES = ['raw-store', 'cut-station', 'weld-station', 'fg-store'];
@@ -11,3 +11,8 @@ export declare const BTT: {
11
11
  readonly po: "urn:epcglobal:cbv:btt:po";
12
12
  readonly so: "urn:epcglobal:cbv:btt:so";
13
13
  };
14
+ /**
15
+ * WMS 노드 타입 카탈로그 — 커널이 실제로 키로 쓰는 로케이션 타입(nodeByType/slotViews).
16
+ * 도메인 어휘 SSOT: 호스트·UI 는 이걸 소싱하고 재선언하지 않는다(방언 금지).
17
+ */
18
+ export declare const WMS_NODE_TYPES: readonly ["dock", "storage", "staging", "dock-ship"];
@@ -18,3 +18,8 @@ export const BTT = {
18
18
  po: 'urn:epcglobal:cbv:btt:po',
19
19
  so: 'urn:epcglobal:cbv:btt:so'
20
20
  };
21
+ /**
22
+ * WMS 노드 타입 카탈로그 — 커널이 실제로 키로 쓰는 로케이션 타입(nodeByType/slotViews).
23
+ * 도메인 어휘 SSOT: 호스트·UI 는 이걸 소싱하고 재선언하지 않는다(방언 금지).
24
+ */
25
+ export const WMS_NODE_TYPES = ['dock', 'storage', 'staging', 'dock-ship'];
@@ -9,3 +9,5 @@ export declare const YARD_BIZSTEP: {
9
9
  export declare const BTT_DELIVERY = "urn:epcglobal:cbv:btt:deliv";
10
10
  /** 트레일러/컨테이너 = GRAI(Global Returnable Asset Identifier, 반납형 자산). */
11
11
  export declare function graiUri(companyPrefix: string, assetType: string, serial: number): string;
12
+ /** YMS 노드 타입 카탈로그 — 커널이 키로 쓰는 야드 로케이션 타입(nodeByType/slotViews/.type). 도메인 SSOT. */
13
+ export declare const YMS_NODE_TYPES: readonly ["gate", "yard-slot", "dock-door", "staging"];
@@ -20,3 +20,5 @@ export const BTT_DELIVERY = 'urn:epcglobal:cbv:btt:deliv';
20
20
  export function graiUri(companyPrefix, assetType, serial) {
21
21
  return `urn:epc:id:grai:${companyPrefix}.${assetType}.${String(serial).padStart(6, '0')}`;
22
22
  }
23
+ /** YMS 노드 타입 카탈로그 — 커널이 키로 쓰는 야드 로케이션 타입(nodeByType/slotViews/.type). 도메인 SSOT. */
24
+ export const YMS_NODE_TYPES = ['gate', 'yard-slot', 'dock-door', 'staging'];
@@ -25,10 +25,13 @@ __export(index_exports, {
25
25
  BTT_PRODORDER: () => BTT_PRODORDER,
26
26
  CMD: () => CMD,
27
27
  DISP: () => DISP,
28
+ DOMAIN_CATALOG: () => DOMAIN_CATALOG,
29
+ DOMAIN_SYSTEMS: () => DOMAIN_SYSTEMS,
28
30
  EPCIS_CONTEXT: () => EPCIS_CONTEXT,
29
31
  EventJournal: () => EventJournal,
30
32
  FlowEngine: () => FlowEngine,
31
33
  MES_BIZSTEP: () => MES_BIZSTEP,
34
+ MES_NODE_TYPES: () => MES_NODE_TYPES,
32
35
  MES_PART_GTINS: () => MES_PART_GTINS,
33
36
  MES_PRODUCT_GTINS: () => MES_PRODUCT_GTINS,
34
37
  MesKernel: () => MesKernel,
@@ -38,8 +41,10 @@ __export(index_exports, {
38
41
  TwinObserver: () => TwinObserver,
39
42
  TwinRuntime: () => TwinRuntime,
40
43
  UTC_OFFSET: () => UTC_OFFSET,
44
+ WMS_NODE_TYPES: () => WMS_NODE_TYPES,
41
45
  WmsKernel: () => WmsKernel,
42
46
  YARD_BIZSTEP: () => YARD_BIZSTEP,
47
+ YMS_NODE_TYPES: () => YMS_NODE_TYPES,
43
48
  YmsKernel: () => YmsKernel,
44
49
  aggregationEvent: () => aggregationEvent,
45
50
  compareStates: () => compareStates,
@@ -450,6 +455,49 @@ var BTT = {
450
455
  po: "urn:epcglobal:cbv:btt:po",
451
456
  so: "urn:epcglobal:cbv:btt:so"
452
457
  };
458
+ var WMS_NODE_TYPES = ["dock", "storage", "staging", "dock-ship"];
459
+
460
+ // src/yms-profile.ts
461
+ var YARD_BIZSTEP = {
462
+ arriving: "urn:epcglobal:cbv:bizstep:arriving",
463
+ // 게이트-인
464
+ staging: "urn:epcglobal:cbv:bizstep:staging",
465
+ // 야드 슬롯 주차·대기
466
+ loading: "urn:epcglobal:cbv:bizstep:loading",
467
+ // 도크 작업(상차: 트레일러←화물)
468
+ unloading: "urn:epcglobal:cbv:bizstep:unloading",
469
+ // 도크 작업(하차: 트레일러→화물)
470
+ departing: "urn:epcglobal:cbv:bizstep:departing"
471
+ // 게이트-아웃
472
+ };
473
+ var BTT_DELIVERY = "urn:epcglobal:cbv:btt:deliv";
474
+ function graiUri(companyPrefix, assetType, serial) {
475
+ return `urn:epc:id:grai:${companyPrefix}.${assetType}.${String(serial).padStart(6, "0")}`;
476
+ }
477
+ var YMS_NODE_TYPES = ["gate", "yard-slot", "dock-door", "staging"];
478
+
479
+ // src/mes-profile.ts
480
+ var MES_BIZSTEP = {
481
+ receiving: "urn:epcglobal:cbv:bizstep:receiving",
482
+ // 원자재 수령
483
+ producing: "urn:epcglobal:cbv:bizstep:commissioning",
484
+ // 생산(제품 최초 생성)
485
+ storing: "urn:epcglobal:cbv:bizstep:storing"
486
+ // 완제품 저장
487
+ };
488
+ var BTT_PRODORDER = "urn:epcglobal:cbv:btt:prodorder";
489
+ function sgtinUri(companyPrefix, itemRef, serial) {
490
+ return `urn:epc:id:sgtin:${companyPrefix}.${itemRef}.${serial}`;
491
+ }
492
+ var MES_NODE_TYPES = ["raw-store", "cut-station", "weld-station", "fg-store"];
493
+
494
+ // src/domain-catalog.ts
495
+ var DOMAIN_CATALOG = {
496
+ wms: { system: "wms", label: "WMS (\uBB3C\uB958\uCC3D\uACE0)", nodeTypes: WMS_NODE_TYPES },
497
+ yms: { system: "yms", label: "YMS (\uC57C\uB4DC)", nodeTypes: YMS_NODE_TYPES },
498
+ mes: { system: "mes", label: "MES (\uC81C\uC870)", nodeTypes: MES_NODE_TYPES }
499
+ };
500
+ var DOMAIN_SYSTEMS = ["wms", "yms", "mes"];
453
501
 
454
502
  // src/allocation-policy.ts
455
503
  function freeBinsFirstFit(slots) {
@@ -583,38 +631,6 @@ var TwinRuntime = class {
583
631
  }
584
632
  };
585
633
 
586
- // src/yms-profile.ts
587
- var YARD_BIZSTEP = {
588
- arriving: "urn:epcglobal:cbv:bizstep:arriving",
589
- // 게이트-인
590
- staging: "urn:epcglobal:cbv:bizstep:staging",
591
- // 야드 슬롯 주차·대기
592
- loading: "urn:epcglobal:cbv:bizstep:loading",
593
- // 도크 작업(상차: 트레일러←화물)
594
- unloading: "urn:epcglobal:cbv:bizstep:unloading",
595
- // 도크 작업(하차: 트레일러→화물)
596
- departing: "urn:epcglobal:cbv:bizstep:departing"
597
- // 게이트-아웃
598
- };
599
- var BTT_DELIVERY = "urn:epcglobal:cbv:btt:deliv";
600
- function graiUri(companyPrefix, assetType, serial) {
601
- return `urn:epc:id:grai:${companyPrefix}.${assetType}.${String(serial).padStart(6, "0")}`;
602
- }
603
-
604
- // src/mes-profile.ts
605
- var MES_BIZSTEP = {
606
- receiving: "urn:epcglobal:cbv:bizstep:receiving",
607
- // 원자재 수령
608
- producing: "urn:epcglobal:cbv:bizstep:commissioning",
609
- // 생산(제품 최초 생성)
610
- storing: "urn:epcglobal:cbv:bizstep:storing"
611
- // 완제품 저장
612
- };
613
- var BTT_PRODORDER = "urn:epcglobal:cbv:btt:prodorder";
614
- function sgtinUri(companyPrefix, itemRef, serial) {
615
- return `urn:epc:id:sgtin:${companyPrefix}.${itemRef}.${serial}`;
616
- }
617
-
618
634
  // src/flow-engine.ts
619
635
  var BASE_EPOCH = Date.parse("2026-01-01T00:00:00Z");
620
636
  function mulberry32(seed) {
@@ -1438,10 +1454,13 @@ var MesKernel = class extends FlowEngine {
1438
1454
  BTT_PRODORDER,
1439
1455
  CMD,
1440
1456
  DISP,
1457
+ DOMAIN_CATALOG,
1458
+ DOMAIN_SYSTEMS,
1441
1459
  EPCIS_CONTEXT,
1442
1460
  EventJournal,
1443
1461
  FlowEngine,
1444
1462
  MES_BIZSTEP,
1463
+ MES_NODE_TYPES,
1445
1464
  MES_PART_GTINS,
1446
1465
  MES_PRODUCT_GTINS,
1447
1466
  MesKernel,
@@ -1451,8 +1470,10 @@ var MesKernel = class extends FlowEngine {
1451
1470
  TwinObserver,
1452
1471
  TwinRuntime,
1453
1472
  UTC_OFFSET,
1473
+ WMS_NODE_TYPES,
1454
1474
  WmsKernel,
1455
1475
  YARD_BIZSTEP,
1476
+ YMS_NODE_TYPES,
1456
1477
  YmsKernel,
1457
1478
  aggregationEvent,
1458
1479
  compareStates,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@operato/twin-kernel",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "description": "Twin Domain Kernel — framework-agnostic, zero-dep (domain + sim + 3-channel contract). WMS/YMS/MES, EPCIS 2.0 · ISA-95.",
6
6
  "publishConfig": {