@operato/twin-kernel 0.11.5 → 0.11.6

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.
Files changed (2) hide show
  1. package/dist-cjs/index.cjs +23 -2
  2. package/package.json +1 -1
@@ -428,6 +428,8 @@ function minutesOfDay(hhmm) {
428
428
  return void 0;
429
429
  const h = Number(m[1]);
430
430
  const mi = Number(m[2]);
431
+ if (h === 24)
432
+ return mi === 0 ? 24 * 60 : void 0;
431
433
  if (h > 23 || mi > 59)
432
434
  return void 0;
433
435
  return h * 60 + mi;
@@ -1614,6 +1616,8 @@ function header(type, eventTime, bizStep, opts) {
1614
1616
  h.recordTime = opts.recordTime;
1615
1617
  if (opts?.errorDeclaration)
1616
1618
  h.errorDeclaration = opts.errorDeclaration;
1619
+ if (opts?.bizTransactionList?.length)
1620
+ h.bizTransactionList = opts.bizTransactionList;
1617
1621
  if (opts?.ilmd)
1618
1622
  h.ilmd = opts.ilmd;
1619
1623
  if (opts?.sourceList)
@@ -1902,7 +1906,24 @@ var SPECS = {
1902
1906
  operationsRequestId: "string",
1903
1907
  dockDoor: "string",
1904
1908
  windowStartMs: "number",
1905
- recordTime: "string"
1909
+ recordTime: "string",
1910
+ /*
1911
+ * 이 오더를 어느 레시피로 돌리나 — 「이 로트를 무엇으로 만들었나」가 이 칸을 지나 답한다.
1912
+ *
1913
+ * ── 왜 뒤늦게 생겼나 (2026-09-07 측정) ─────────────────────────────────
1914
+ * EPCIS 변환 사건에는 레시피 자리가 없다(표준이 그렇다). 그래서 이력추적이 **변환 → 거래
1915
+ * 식별자 → 그 오더의 `recipeKey`** 로 건너간다(`twin-lineage-query.ts:296-315`).
1916
+ *
1917
+ * 변환이 오더를 가리키게 만든 뒤에 재보니, **가리켜진 오더 행에 그 칸이 없었다.** 실으면
1918
+ * 레코드가 통째로 거절됐다 — `order: 계약에 없는 필드 — recipeKey`. 조용히 버리지 않은 것은
1919
+ * 맞지만, 그래서 실 시스템에서는 그 물음이 계속 답이 없었다.
1920
+ *
1921
+ * 값은 원본에 있다: `job_orders.recipe_key` 35개 중 20개 채움
1922
+ * (`WO-ECU-STD-2609A` = `RECIPE-ECU-STD`).
1923
+ *
1924
+ * 새 어휘가 아니다 — 계약이 `recipeKey` 를 네 자리에서 이미 쓴다. 오더 관측에만 자리가 없었다.
1925
+ */
1926
+ recipeKey: "string"
1906
1927
  }
1907
1928
  /* 상태·종류는 도메인이 소유한다 — 닫지 않는다. */
1908
1929
  },
@@ -2160,7 +2181,7 @@ function computeOee(c, nowMs) {
2160
2181
  if (planned <= 0)
2161
2182
  missing.push("planned-busy-time");
2162
2183
  const delayMs = Math.max(0, planned - c.runMs - c.setupMs - c.downMs);
2163
- const availability = planned > 0 ? Math.min(1, c.runMs / planned) : void 0;
2184
+ const availability = planned > 0 ? c.runMs / planned : void 0;
2164
2185
  const produced = c.goodCount + c.nonconformingCount;
2165
2186
  if (produced <= 0)
2166
2187
  missing.push("produced-quantity");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@operato/twin-kernel",
3
- "version": "0.11.5",
3
+ "version": "0.11.6",
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": {