import { Domain } from '@things-factory/shell'; import { TwinInstance } from '../twin-instance/twin-instance.js'; export declare class TwinOperation { readonly id: string; domain?: Domain; domainId?: string; instance?: TwinInstance; instanceRowId?: string; /** 커널 계약의 `OperationDef.key` 그대로. 라우트의 단계가 이 키로 가리킨다. */ operationKey: string; /** * **사람이 부르는 이름** — 프레임워크 엔티티 규약의 `name`/`description`. * * ── 왜 이것이 빠져 있었고, 무엇이 망가졌나 ──────────────────────────────────── * 투영이 마스터의 `name` 을 버리고 있었다. 그래서 행에는 id 만 남고, 화면은 이름을 만들 재료가 * 없어 `cut-station` 을 그대로 찍었다 — 그 결함이 목록·표·관계 그림마다 따로 나타나서 표면을 * 하나씩 고치게 만들었다. 표면의 문제가 아니라 **행에 이름이 없던 문제**다. * * 원본이 이름을 말하지 않으면 비운다(id 를 이름으로 베끼지 않는다 — 그러면 "이름이 있다" 는 * 거짓이 되고, 화면이 이름 없음을 알아볼 수 없게 된다). */ name?: string; description?: string; intent?: string; locationType?: string; resourceType?: string; /** * 소요시간 — **ISO 8601 기간 문자열이 정본**(`PT1H10M`). * * 분으로 저장하면 `PT1H10M30S` 의 초가 사라지고 그 손실은 들어온 것이 없다. 사람이 읽을 분은 * 화면이 곁들여 보여 주고, 못 읽는 값은 `—` 로 낸다(0 으로 채우면 "즉시 끝나는 공정" 이라는 거짓). */ duration?: string; /** * 변동성·파라미터(수율·셋업)는 형이 도메인마다 달라 **원형 그대로** 싣는다. * 여기를 컬럼으로 펴려면 커널이 그 형을 먼저 고정해야 한다 — 아직 아니다. */ variability?: any; parameters?: any; /** * **네 자원 명세 — 선언한 것만 제약이 된다.** * * ISA-95 는 한 공정이 무엇을 필요로 하는지를 넷으로 말한다: 설비(`resourceType`)·인원·자산·자재. * 커널도 그 넷을 그대로 본다 — 선언이 있으면 잡아야 작업이 시작되고, 없으면 그 자원을 보지 않는다. * * 이 셋이 투영에서 **떨어져 있었다.** 그래서 조회 화면의 "원본이 말한 값" 열에 넷 중 하나만 * 나왔고, 사람이 필요한 공정을 보고도 **사람이 필요 없다고 결론 내게** 되어 있었다. 원본이 말한 * 것을 화면이 말하지 않으면 그 화면은 원본을 반영하는 것이 아니다. * * 모양은 커널 계약 그대로 싣는다 — 인제스트 경계에서 모양을 바꾸면 그 자리에서 방언이 생긴다. */ personnelSpecification?: any; physicalAssetSpecification?: any; materialSpecification?: any; /** 라우트 안에서의 순서 — 라우트가 이 공정을 몇 번째로 부르나(라우트 표가 서면 그리로 옮긴다). */ seq?: number; sourceRef: string; ingestedAt: Date; createdAt?: Date; updatedAt?: Date; }