/** 한 층의 상태 — 있음 · 부분 · 없음. "부분" 을 두는 이유: 절반 있는 것을 있다고 하면 기준이 죽는다. */ export type CoverageLevel = 'full' | 'partial' | 'none'; export interface Isa95Concept { /** 표준이 부르는 이름 — 이 표의 키다(우리 어휘가 아니라 표준 어휘). */ std: string; /** 표준의 어느 부분인가 — Part 2(자원 모델) · Part 4(일정·실적) 등. */ part: string; /** 사람이 읽는 이름(i18n 키). 화면이 번역한다. */ label: string; /** 우리 커널 축 — 있으면 데이터구조가 있는 것이다. 없으면 `null`. */ axis: string | null; /** 세 층의 상태. `structure` 는 `axis` 로도 검증된다. */ structure: CoverageLevel; behavior: CoverageLevel; surface: CoverageLevel; /** 왜 그 수준인지 — **모르는 것을 감추지 않기 위해** 한 줄로 적는다(i18n 키). */ note?: string; /** * 자기 축이 없을 때 **어디서 보이나** — 그 사실을 들고 있는 축들. * * 「어디에」칸이 두 가지를 합쳐고 있었다: *아직 축이 없다(부채)* 와 *축일 수 없다(설계)*. 가용 능력은 * 개체가 아니라 자원의 지금 상태이므로 축이 될 수 없는데, 세 층이 다 완전한 줄이 "개념 축이 없습니다" * 라고만 말하면 **표가 스스로 모순된 말을 한다**(다 됐다면서 없다고 한다). * * 그래서 축일 수 없는 것은 갈 곳을 가리킨다. 여기가 비어 있고 축도 없으면 그것은 **진짜 빈칸**이다. * * ── ★ 뜻을 고쳐 적는다 (2026-08-24, 사용자 지적) ────────────────────────── * 한때 이 칸을 「**어디서 보이나**」로 읽고, 화면이 그것을 「해당 축 항목에 표시됩니다」라는 문장으로 * 냈다. 두 가지가 잘못이었다. * * ① 그 문장은 **한국어가 아니었다**(사용자 지적). 그리고 칩이 이미 갈 곳을 보이므로 **군더더기**다. * ② 뜻이 틀렸다. 이 칸은 「**어디에 속하나**」다 — 그 개념이 자기 목록을 갖지 않고 **어느 축의 안에 * 들어 있나**. 화면에 그려지는지는 `surface` 가 따로 답한다. 둘은 다른 물음이다. * * 그래서 **`surface` 와 짝을 맞추지 않는다.** 자기 축이 없으면 언제나 갈 곳을 적는다 — 아직 그려지지 * 않는 개념도 **어디에 속하는지는 사실**이고, 그것을 비우면 「어디에도 없는 것」으로 읽힌다. * * 여기가 비어 있고 축도 없으면 그것은 **진짜 빈칸**이다(위 규칙). */ shownOn?: string[]; } /** 표준이 요구하는 것 전부 — 이 배열이 곧 기준이다. */ export declare const ISA95_CONCEPTS: Isa95Concept[]; /** * 적합성 보고 — **채운 것과 빠진 것을 함께.** * * `axis` 를 커널 축 목록과 맞춰 본다: 축이 있다고 적혀 있는데 커널에 없으면 그 선언이 낡은 것이므로 * **구조 없음으로 낮추고 그 사실을 말한다**(알리지 않고 통과시키면 이 표가 거짓이 된다). */ /** * 선언한 축을 커널의 축 목록과 맞춘다 — **어긋난 것을 알리지 않고 지우지 않는다.** * * 두 자리가 어긋날 수 있다. * · `axis` — 그 개념 자신의 문. 커널에 없으면 구조를 「없음」으로 낮추고 그 사실을 말한다. * · `shownOn` — 그 사실을 들고 있는 다른 축. 예전에는 없는 축을 **말없이 걸러 냈다.** 그러면 그 줄은 * 「개념 축이 없습니다」로 보이고, 사람은 그것을 **원래 그런 것**으로 읽는다. 실제로 그 일이 있었다: * EPCIS 표의 일곱 줄이 커널에 없는 축(`items`)에 기대고 있었는데, 경고가 뜬 것은 두 줄뿐이었다. * * 둘 중 하나라도 어긋나면 `axisMissing` 이다 — 표가 스스로 「최신이 아니다」라고 말하게 한다. */ export declare function reconcileAxes(c: Isa95Concept, known: Set): Isa95Concept & { axisMissing?: boolean; }; export declare function isa95Coverage(axes: string[]): { model: string; concepts: (Isa95Concept & { axisMissing?: boolean; })[]; totals: { concepts: number; structure: number; behavior: number; surface: number; }; };