import { type OrderFoldPolicy } from '@operato/ops-contract'; export interface EntityDelta { tag: string; data: any; } /** 집약 고정 태그 — 클라 provider 와 일치해야 한다(런타임 생성 엔티티는 개별 배치가 불가하므로 집약 뷰). */ export declare const ORDERS_TAG_PREFIX = "__orders__"; export declare const TASKS_TAG_PREFIX = "__tasks__"; export declare const ITEMS_TAG_PREFIX = "__items__"; export declare const PERSONS_TAG_PREFIX = "__persons__"; export declare const ASSETS_TAG_PREFIX = "__assets__"; /** 에너지 집약 — 수요 구간·피크·계약은 **트윈 하나의 사실**이라 개체 태그가 없다. */ export declare const ENERGY_TAG_PREFIX = "__energy__"; /** 이 트윈의 집약 채널 태그. 트윈 식별자가 없으면 만들지 않는다 — 덮어쓰기의 원인이었다. */ export declare function aggregateTag(prefix: string, instanceId: string): string; export declare const ordersTag: (instanceId: string) => string; export declare const tasksTag: (instanceId: string) => string; export declare const itemsTag: (instanceId: string) => string; export declare const personsTag: (instanceId: string) => string; export declare const assetsTag: (instanceId: string) => string; export declare const energyTag: (instanceId: string) => string; /** * 물품 집약의 상한 — 큰 현장은 물품이 수만 개라, 전량을 매 브로드캐스팅에 실으면 전달이 현장을 느리게 한다. * * **알리지 않고 자르지 않는다**: 넘치면 `total`(전체 수)과 `truncated`(잘린 수)를 함께 실어, 소비처가 * "이게 전부" 라고 오해하지 않게 한다. 개별 물품은 태그별 delta 로 따로 나가고 그쪽은 시그니처 dedup * 이 걸려 **변한 것만** 재브로드캐스팅된다. */ export declare const ITEMS_AGGREGATE_LIMIT = 500; /** * 물품 축만 **범위를 줄일 수 있다** (2026-08-21). * * ── 왜 이 인자가 생겼나 ───────────────────────────────────────────────────── * 브로드캐스팅 한 번이 만드는 payload 는 엔티티 수만큼이고 그 대부분이 물품이다(실측: 엔티티 3,611 중 * 물품 2,400 · 만드는 데 1.8ms · 문자열로 바꾸는 데 1.0ms). 바뀐 것이 물품 하나여도 전부 만들어 * 「같다」를 확인하고 버렸다. * * `items` 를 주면 **그 태그의 물품만** 개별 payload 를 만든다. 주지 않으면(`undefined`) 전부 만든다 — * 부르는 쪽이 무엇이 바뀌었는지 말할 수 없을 때의 답이다. * * **집약 뷰는 범위를 받지 않는다.** 집약은 목록 전체가 한 payload 라서, 한 물품이 바뀌면 그 payload 는 * 통째로 새로 만들어야 한다(상한 500으로 이미 묶여 있다). 자리·설비·인원·자산·작업·오더도 범위를 받지 * 않는다 — 수가 적고, 잘못 걸러서 잃는 것이 크다(자리 점유는 물품이 떠난 자리와 도착한 자리가 함께 * 바뀌는데 사건은 한 지점만 말한다). */ export interface EntityDeltaScope { /** 개별 payload 를 만들 물품 태그. 없으면 전부. */ items?: ReadonlySet; } export declare function buildEntityDeltas(state: any, instanceId: string, scope?: EntityDeltaScope, /** 끝난 오더를 접는 경계(모델의 `orderFold`) — 「최근 T 완료」의 T 다. 없으면 커널의 기본. */ orderFold?: OrderFoldPolicy): EntityDelta[];