{ "pageTitle": "庫存帳修復", "inventory10Title": "1.0 inventory(方案 A)", "inventory10Description": "保留現有 id;lot 有、inventory 沒有的 UOM 會新增;onHand = Σ(in−out) 按 item+UOM。沒有 lot 的列會變成 0。同一料多顆舊列時只留一顆 stock UOM 桶,其餘 deleted=1。請在進出倉暫停時執行,再逐日 Fix。", "inventory10LoadError": "無法載入 inventory 1.0 預覽(需要 ADMIN / TESTING)", "inventory10Preview": "現有 inventory {{rows}} 列;lot 的 item+UOM {{lotPairs}} 組;缺 {{missing}} 組;stockUomId 仍 NULL {{nullUom}} 列。", "inventory10Running": "重算中…", "inventory10Run": "Run inventory 1.0 (A)", "inventory10Confirm": "方案 A:保留現有 inventory.id;從 lot 回填 stockUomId(舊 uomId 是 stock 則改回 base);補缺 (itemId, stockUomId);用 lot 的 in−out 重算 onHand/unavailable。不寫 onHoldQty、不改 inventory_lot_line。確定執行?", "inventory10Done": "inventory 1.0 完成:回填 stockUomId {{patched}} 列、新增 {{inserted}} 列、殘列 deleted {{orphans}}、重算 {{updated}} 列、之後仍缺 UOM {{missingAfter}}、仍 NULL stockUomId {{nullAfter}}", "inventory10Fail": "inventory 1.0 失敗", "adjTitle": "2.7 ADJ:超發 remain→0,再對齊 ledger", "adjDescription": "請先選 ADJ 日期再預覽。預設昨天;freeze dump 夜可選今天(例如 31/8 23:17 寫 ADJ 到 31/8)。先處理超發(line 入少於出):把該 lot 的 inQty 補到等於 outQty(remain=0,trigger 重算 inventory)。再處理 miss:line 與 ledger 有差就 ADJ,掛既有 lot 的入/出倉行(不改 lot 數量)。一次 Apply 共用一張入倉單、一張出倉單,下面多行;同一 ADJ 日期再跑會沿用這兩張單。明細最多 20 列。", "adjDateLabel": "ADJ 日期", "adjDateRequired": "請填 ADJ 日期", "adjDateFuture": "ADJ 日期不能是未來", "adjDateAndPreviewRequired": "請填 ADJ 日期並先預覽", "adjTodayFreeze": "今天(freeze 夜)", "adjYesterday": "昨天", "adjLoadError": "無法載入 ADJ 預覽(需要 ADMIN / TESTING)", "adjPreviewSummary": "ADJ 日期 {{date}};可處理 {{lotCount}} 條 lot(超發 remain→0 {{overIssueCount}}、合計 {{sumOverIssue}};miss 入 {{adjInCount}}、出 {{adjOutCount}});缺入合計 {{sumMissIn}}、缺出合計 {{sumMissOut}};SKU 淨額 {{skuNet}}{{skuNetNote}}{{revNote}}。下列最多 20 列(超發優先)。", "adjSkuNetNote": "(非 0 表示有缺入沒有對應缺出)", "adjRevNote": ";含反向 ADJ {{count}} 條(ledger 多記)", "adjColLotLineId": "lotLineId", "adjColItemCode": "itemCode", "adjColLineInOut": "line in/out", "adjColLedgerInOut": "ledger in/out", "adjColMissIn": "缺入", "adjColMissOut": "缺出", "adjColOverIssue": "超發", "adjPreviewing": "預覽中…", "adjPreviewAgain": "重新預覽", "adjPreview": "預覽", "adjApplying": "寫入 ADJ 中…", "adjApply": "Apply ADJ", "adjConfirm": "會在 {{date}} 先修超發 remain→0({{overIssueCount}} 條 lot,合計 {{sumOverIssue}},會改 lot inQty)。再補 miss ADJ:入向 {{adjInCount}} 筆、出向 {{adjOutCount}} 筆。入向全部掛同一張入倉單、出向全部掛同一張出倉單(miss 不改 lot 數量)。缺入合計 {{sumMissIn}}、缺出合計 {{sumMissOut}}。確定?", "adjDone": "ADJ {{date}}:超發 remain→0 {{overIssuePatched}}、入 {{insertedIn}}、出 {{insertedOut}}、lotQty {{filledLotQty}}、balance {{filledBalance}}、日結 {{dayRowsWritten}}", "adjFail": "ADJ 對齊失敗", "tabCalendar": "日曆", "tabInventory": "Inventory", "tabLot": "Lot line", "calendarHint": "點左上標題可先選年再選月。換月不會查資料;點某一天才檢查當天。今天可修(freeze dump 夜)。", "selectDate": "請選日期", "dayLoadError": "無法載入當日檢查", "dayLedgerCount": "當天 ledger {{cnt}} 列", "cannotFixFuture": "不能修未來日期", "cannotFixFutureRange": "不能修未來日期(今天可以,給 freeze dump 夜修)", "pickAtLeastOneStep": "請至少勾一個步驟(預設全跑 2.1–2.6)", "allSteps216": "全部 2.1–2.6", "confirmPartialSteps": "只跑 {{steps}}({{date}})。未勾的步驟不會重算。確定?", "fixDayDone": "已修 {{date}}({{steps}}):lot {{lot}}、uom {{uom}}、inventory {{inventory}}、lotQty {{lotQty}}、balance {{balance}}、日結 {{dayRows}}", "fixFailed": "修復失敗", "fixing": "修復中…", "fixThisDay": "Fix this day", "stepsTitle": "步驟(預設全跑)", "stepsHint": "套 SQL 後只改 inventoryId 時只勾 2.3。只跑部分時未勾的不會重算。", "selectAll": "全選", "step21": "2.1 lot", "step22": "2.2 uom", "step23": "2.3 inventoryId", "step24": "2.4 lotQty", "step25": "2.5 balance", "step26": "2.6 日結", "rangeTitle": "區間修(2.1–2.6 一次)", "rangeHint": "使用上面勾的步驟,一次 API 但改為逐日(與單日修相同 SQL,每天 commit)。可含今天(freeze dump 夜)。前端最長約 20 分鐘;大區間仍建議匯出 SQL。", "rangeFromRequired": "請填區間修 from / to", "toMustBeGteFrom": "to 必須 ≥ from", "fromTooEarly": "from 不能早於 {{date}}", "rangeConfirm": "一次修 {{from}} → {{to}}(步驟:{{steps}})。改為逐日跑(每天 commit)。中途失敗時已跑完的天會留下。確定?", "rangeProgress": "區間修 {{from}} → {{to}}({{steps}})進行中…", "rangeDone": "區間修完成 {{date}}({{steps}}):lot {{lot}}、uom {{uom}}、inventory {{inventory}}、lotQty {{lotQty}}、balance {{balance}}、日結 {{dayRows}}", "rangeFail": "區間修失敗", "rangeRunning": "區間修中…", "rangeRun": "區間修", "from": "from", "to": "to", "exportTitle": "匯出已修 SQL(新庫用)", "exportHint": "勾選要匯出的段落(同日修步驟)。套檔順序:1.0 → ledger(±2.3)→ 2.7 入出倉單+ADJ INSERT → 2.6。完整檔(含 1.0+2.3)且正式庫 freeze/id 同源時,可跳過正式庫 1.0/2.3。預設只匯 ledger+日結(舊行為)。", "exportPickAtLeastOne": "請至少勾一個匯出項目", "export23Without10": "已勾 2.3 inventoryId 但未勾 1.0 inventory:正式庫若缺新 id,UPDATE 會指到空列。建議一併勾 1.0(完整檔)。仍要匯出?", "exportFail": "匯出失敗", "exporting": "匯出中…", "exportSql": "匯出 .sql", "exportDefault": "預設", "exportFull": "完整檔", "exportFromToRequired": "請填 from / to", "export10": "1.0 inventory", "export23": "2.3 inventoryId", "exportLedger": "ledger lot/uom/lotQty/balance", "export26": "2.6 日結", "export27": "2.7 ADJ+入出倉單", "invTabHint": "搜 itemCode 或 inventoryId。Fix 會重算這顆料到今天為止全部流水的 lotQty、日結與 balance,不必逐日點日曆。白天倉還在寫這顆料時,修完後新流水仍由 live writer 接。", "invSearchLabel": "itemCode / inventoryId", "searching": "搜尋中…", "search": "搜尋", "searchFailed": "搜尋失敗", "colInventoryId": "inventoryId", "colItemCode": "itemCode", "colUomId": "uomId", "colLedgerRows": "ledger 列", "invLoadError": "無法載入 inventory", "invScopeSummary": "{{itemCode}} / inventory {{id}} / uom {{uomId}};{{firstDate}} → {{lastDate}};{{cnt}} 列;最後 balance {{lastBalance}}", "invFixConfirm": "會重算這顆 inventory 到今天為止全部 ledger 的 lotQty、日結,以及這顆料的 balance。確定?", "invFixDone": "已修 inventory {{id}}:lot {{lot}}、uom {{uom}}、inventory {{inventory}}、lotQty {{lotQty}}、balance {{balance}}、日結 {{dayRows}}", "fixThisInventory": "Fix this inventory", "lotTabHint": "搜 lotNo 或 inventoryLotLineId。Fix 只重算這張 lot 的 lotQty 與日結,不改 balance。", "lotSearchLabel": "lotNo / lot line id", "colLotLineId": "lot line id", "colLotNo": "lotNo", "lotLoadError": "無法載入 lot", "lotScopeSummary": "{{lotNo}} / lot {{id}} / {{itemCode}};{{firstDate}} → {{lastDate}};{{cnt}} 列;最後 lotQtyAfter {{lastLotQtyAfter}}", "lotFixConfirm": "只修這張 lot 的 lotQty 與日結,不會改整顆料的 balance。確定?", "lotFixDone": "已修 lot {{id}}:lot {{lot}}、uom {{uom}}、inventory {{inventory}}、lotQty {{lotQty}}、日結 {{dayRows}}", "fixThisLot": "Fix this lot", "checkItem": "項目", "checkStatus": "狀態", "checkCorrect": "正確", "checkMiss": "缺", "checkIncorrect": "不正確", "checkReason": "原因", "checkRows": "列數", "checkDash": "—", "canAutoFix": "可自動修(按 Fix 會處理)", "cannotAutoFix": "不能自動修(Fix 不會消;舊 TKE 開新批/真超發/沒有 lot 來源)", "verdictCorrect": "correct", "verdictMiss": "miss", "verdictOverIssue": "over-issue", "verdictCanFix": "可修", "verdictCannotFix": "不能修", "verdictIncorrect": "incorrect", "part": { "lot": "inventoryLotLineId", "uom": "uomId", "inventory": "inventoryId", "lotQty": "lotQtyBefore/After(lot 已有)", "overIssue": "over-issue (lotQty < 0)", "balance": "balance", "dayTable": "stock_lot_day", "fixable21a": "可修 2.1a:SIL/SOL 已有 lot line", "fixable21b": "可修 2.1b:inventoryLotId 僅一條 line", "fixableLotQty": "可修:lot 已有但缺 lotQty", "cannotNoSource": "不能修:沒有 SIL/SOL lot 來源", "cannotMultiLine": "不能修:同一 lot 有多條 warehouse line", "earlyTke": "不能修:舊 TKE 開新批(sibling 盤盈)", "realOver": "不能修:over-issue 非舊 TKE(真超發/帳不一致)" } }