import { Domain } from '@things-factory/shell'; import { TwinInstance } from '../twin-instance/twin-instance.js'; import { TwinArea } from '../twin-space/twin-area.js'; export declare class TwinLocation { readonly id: string; domain?: Domain; domainId?: string; instance?: TwinInstance; instanceRowId?: string; /** 커널 계약의 `TwinModelDef.locations[].id` **그대로**. 바인딩은 id===id 다(ADR-0014). */ locationId: string; /** * **사람이 부르는 이름** — 프레임워크 엔티티 규약의 `name`/`description`. * * ── 왜 이것이 빠져 있었고, 무엇이 망가졌나 ──────────────────────────────────── * 투영이 마스터의 `name` 을 버리고 있었다. 그래서 행에는 id 만 남고, 화면은 이름을 만들 재료가 * 없어 `cut-station` 을 그대로 찍었다 — 그 결함이 목록·표·관계 그림마다 따로 나타나서 표면을 * 하나씩 고치게 만들었다. 표면의 문제가 아니라 **행에 이름이 없던 문제**다. * * 원본이 이름을 말하지 않으면 비운다(id 를 이름으로 베끼지 않는다 — 그러면 "이름이 있다" 는 * 거짓이 되고, 화면이 이름 없음을 알아볼 수 없게 된다). */ name?: string; description?: string; /** * 커널 카탈로그의 자리 타입 키(`storage`·`dock`·`yard-slot`…). * * **FK 를 걸지 않는다** — 타입 카탈로그는 커널이 SSOT 이고(ADR-0018) DB 로 내리면 * **커널 어휘의 사본**이 생긴다. 문자열 + 부팅 시 검증이 맞다(ADR-0032-F). */ type: string; capacity?: number; parallelism?: number; /** * 속한 구역 — **실제 FK**. * * 커널 계약에서는 `locations[].parentId` 가 model 안에 대상이 없는 참조였다(마스터에서 구역도 * 자리와 한 목록이었다가 인제스트가 갈라 `TwinArea` 로 보내기 때문). 커널은 그것을 * `external: 'space.area'` 로 선언했고, **호스트에서는 평범한 FK 가 된다.** */ area?: TwinArea; areaRowId?: string; /** GS1 식별자(SGLN 등) — 원본이 주면 싣는다. */ gs1Id?: string; /** * 이 자리의 **선언 속성** — 계약전력·요금 단가처럼 자리에 얹히는 수(ISA-95 Property). * * ── 왜 늦게 생겼나 (2026-08-18) ──────────────────────────────────────────── * 설비 행에는 이 칸이 있었는데 자리 행에는 없었다. 그래서 수전 지점에 계약전력·요금을 넣어도 **항목 * 패널의 「원본이 말한 값」에 그 줄이 아예 없었다** — 사용자는 값을 넣고도 화면에서 찾을 수 없었고, * 「이 값이 무엇을 바꾸나」는 문장도 붙을 자리가 없었다(들어온 것이 없는 누락). */ properties?: any; sourceRef: string; ingestedAt: Date; createdAt?: Date; updatedAt?: Date; }