@operato/twin-kernel 0.7.72 → 0.7.73

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.
@@ -29,7 +29,19 @@ export function isEnergyRecord(record) {
29
29
  const r = record;
30
30
  /* 계량 지점이 있고 EPCIS 어휘가 없으면 에너지다. `epc` 가 함께 있으면 둘 중 무엇인지 알 수 없으므로
31
31
  에너지로 받지 않는다 — 그 판단은 커넥터가 명확히 해야 한다. */
32
- return typeof r.meterId === 'string' && r.meterId.trim().length > 0 && r.epc === undefined;
32
+ if (!(typeof r.meterId === 'string' && r.meterId.trim().length > 0 && r.epc === undefined))
33
+ return false;
34
+ /*
35
+ * ── **마감된 구간은 계량 표본이 아니다** (2026-08-29) ──────────────────────
36
+ *
37
+ * 둘 다 `meterId` 를 가지므로 이 판별이 겹쳤다. 겹친 채로 두면 갈림의 **순서**가 값을 정한다 —
38
+ * 순서를 잘못 두면 시간별 사용량이 계량 문으로 가고, 그 문은 `kWh` 를 적산 레지스터로 읽는다.
39
+ * 우리가 넣는 값은 이미 그 구간의 양이므로 **차분의 차분**이 된다.
40
+ *
41
+ * 가장 나쁜 모양이다: **거부되지 않고 값만 틀린다.** 그래서 순서에 기대지 않고 배타로 만든다
42
+ * (설비 상태와 발전 적산을 가를 때와 같은 규율).
43
+ */
44
+ return r.from === undefined && r.to === undefined;
33
45
  }
34
46
  /**
35
47
  * 표본 레코드들을 봉투로 — 유효한 것만 통과하고 나머지는 이유와 함께 남는다.
@@ -9531,7 +9531,8 @@ var TwinRuntime = class {
9531
9531
  function isEnergyRecord(record) {
9532
9532
  if (!record || typeof record !== "object") return false;
9533
9533
  const r = record;
9534
- return typeof r.meterId === "string" && r.meterId.trim().length > 0 && r.epc === void 0;
9534
+ if (!(typeof r.meterId === "string" && r.meterId.trim().length > 0 && r.epc === void 0)) return false;
9535
+ return r.from === void 0 && r.to === void 0;
9535
9536
  }
9536
9537
  function ingestEnergyRecords(records, opts) {
9537
9538
  const arr = Array.isArray(records) ? records : records ? [records] : [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@operato/twin-kernel",
3
- "version": "0.7.72",
3
+ "version": "0.7.73",
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": {