> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alforse.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 保存期限

> 為序號與批次追蹤的庫存設定到期日、選擇到期日的計算方式，並決定過期庫存是否仍可發料、調撥或出貨。

保存期限會在品項的每個批次或序號上標示到期日，並在使用該庫存時強制執行。品質、庫存與生產規劃人員針對每個品項設定一次；操作員則會在發料、調撥、揀料與出貨時遇到它。

## 概覽

到期日屬於實體的**追蹤實體**，而不是品項。這就是保存期限只存在於**序號**與**批次**追蹤品項的原因：可互換的*庫存*與*非庫存*品項沒有逐單位的記錄可以承載日期。

三項設定協同運作：

| 設定 | 範圍 | 決定的內容 |
| - | - | - |
| 保存期限**政策** | 單一品項，位於其揀料方法上 | 每個新批次或序號如何取得日期。 |
| **到期日** | 單一追蹤實體 | 該批次或序號何時到期。 |
| **過期實體政策** | 整個公司 | 有人使用超過日期的庫存時會發生什麼事。 |

例如，採用 **120 天**固定期限政策的品項收到一個批次；該批次在收貨過帳日期 120 天後到期。從此時起，依預設的公司規則，將它發料給工單會被拒絕。

## 選擇模式

品項的政策只有一個**模式**。`NotManaged` 是預設值：不追蹤效期，選擇它會移除任何現有政策。其他三種模式各以不同方式計算日期。品項表單以選項卡顯示它們，標示如下。

| 模式（儲存值） | 品項表單上的卡片 | 日期如何設定 | 適用於 |
| - | - | - | - |
| Fixed Duration（固定期限） | **固定保存期限** | 起算事件**加上天數**。 | 自製或採購品項 |
| Calculated（計算） | **繼承自物料** | 製造時所消耗**元件中最早的到期日**。 | 自製品項 |
| Set on Receipt（收貨時設定） | **收貨時輸入** | 收貨時**由使用者輸入**；不做任何計算。 | 採購品項 |

表單會隱藏不適用的模式：自製品項沒有可收貨的東西，因此不提供*收貨時設定*；採購品項不消耗 BOM，因此不提供*計算*。同時採購又自製的品項則三種都看得到。

HEADS UP

**保存期限不是單一的「天數」欄位**

只有**固定期限**是天數。*計算*繼承其輸入中最近的到期日，*收貨時設定*則是手動記錄供應商印製的日期。把每個品項都當成「收貨日期 + N 天」，對三種模式中的兩種是錯誤的。

### 固定期限的計時何時開始

起算事件取決於品項的來源方式：

* **採購品項**從**收貨的過帳日期**起算，而不是從今天起算。
* **自製品項**在**工單工序**結束或開始時起算。您可以限定為單一**觸發製程**（例如*巴氏殺菌*或*包裝*），並選擇**之前**或**之後**的時機。子組件會依自己的工序為各自的批次標示日期。

### 計算模式如何找出最早的輸入

**計算**品項會取其所消耗的追蹤元件中最小的到期日，因此產出品的效期絕不會超過其中效期最短的原料。公司的*計算輸入範圍*決定哪些輸入會被納入：`AllInputs`（預設）使用所有有日期的輸入，`ManagedInputsOnly` 則只使用帶有自己保存期限政策的輸入。

若品項 BOM 中沒有任何輸入具有保存期限政策，品項表單會警告 **"No BOM input has a shelf-life policy"**（沒有任何 BOM 輸入具有保存期限政策），因為無法從 BOM 計算出任何效期。

## 設定品項

政策位於品項的**揀料方法**（某地點的品項）上。保存期限欄位只會出現在序號與批次追蹤的品項。

1. 開啟該地點的品項庫存（揀料方法）表單。
2. 開啟**保存期限**（Shelf-Life，「追蹤此品項的批次或序號何時到期。」）。
3. 選擇一張模式卡：**固定保存期限**、**繼承自物料**或**收貨時輸入**。
4. 若是固定保存期限，請輸入**保存期限（天）**。它會預先填入公司的預設保存期限天數。
5. 對於自製品項，可選擇性挑選**保存期限起算製程**及其**開始計算到期**的時機，並視需要開啟**依 BOM 計算**。
6. 選取**儲存**。

政策的變更會保存在品項的**保存期限歷程**中，可從表單的動作選單開啟。

FieldType

<details>
  <summary>**Mode**</summary>

  *Fixed Duration*、*Calculated* 或 *Set on Receipt*。*（適用於：全部）*
</details>

<details>
  <summary>**Days**</summary>

  加到起算事件上的保存期限長度；至少為 1。*（適用於：Fixed Duration）*
</details>

<details>
  <summary>**Trigger process**</summary>

  啟動計時的工序；留空表示任何工序。*（適用於：Fixed Duration、自製品項）*
</details>

<details>
  <summary>**Timing**</summary>

  計時是在該製程**之前**或**之後**開始：表單上為*製程開始時起算到期*或*製程結束時起算到期*。*（適用於：Fixed Duration、自製品項）*
</details>

<details>
  <summary>**Calculate from BOM**</summary>

  同時將日期限制在所消耗元件中最早的到期日，使產出品的效期不會超過其原物料。若沒有任何輸入具有到期日，則退回使用固定期限。*（適用於：Fixed Duration、自製品項）*
</details>

NOTE

**日期只會寫入一次**

Alforse 只會在追蹤實體尚無到期日時寫入日期，且絕不會悄悄覆寫既有日期。若要變更日期，請使用手動覆寫，這需要提供**原因**，並保存在該實體的歷程中。

## 公司設定

公司範圍的規則位於**設定 → 庫存**中**追溯性**下的**保存期限**卡片：

FieldType

<details>
  <summary>**到期前多少天提出警告**</summary>

  追蹤實體清單中黃色「即將到期」徽章的提前天數。留空即可關閉徽章。
</details>

<details>
  <summary>**預設保存期限（天）**</summary>

  品項設為固定期限時，預先填入\*\*保存期限（天）\*\*的值。預設為 7。
</details>

<details>
  <summary>**計算出的成品有效期限**</summary>

  計算輸入範圍：**依 BOM 計算**（`AllInputs`，預設）或**僅次組件到期日**（`ManagedInputsOnly`）。
</details>

<details>
  <summary>**使用過期庫存時**</summary>

  過期實體政策：*Warn*、*Block* 或 *BlockWithOverride*（見下文）。
</details>

## 過期庫存會發生什麼事

過期實體政策適用於每一次物料發料與庫存調撥：

| 政策 | 設定中的標籤 | 庫存超過日期時的效果 |
| - | - | - |
| Warn | **警告但允許** | 允許，並顯示警告。 |
| Block | **以錯誤阻擋** | 被拒絕；操作員必須改選其他批次或序號。*（預設）* |
| BlockWithOverride | **阻擋，允許覆寫** | 除非使用者提供覆寫原因，否則被拒絕；覆寫需要 `inventory:update` 權限。 |

HEADS UP

**效期會被強制執行**

在預設的 **Block** 政策下，任何消耗或調撥過期批次的嘗試都會停止，並顯示 *"Cannot consume expired tracked entit(y/ies)"*。Alforse 在每個消耗或移動庫存的環節都會檢查：物料發料、庫存調撥與保養工作。現場的操作員與辦公室的規劃人員會遇到同一條規則。

### 揀料順序與接近到期警告

揀料具備 FEFO 感知：追蹤實體會依最早到期優先的順序提供，因此預設最舊的庫存最先出庫。揀料方法的**揀貨順序**（Pick Order）可針對每個品項改為 **FEFO**、**FIFO** 或 **LIFO**；**預設**則先依最近到期日排序，再依最舊排序。

接近日期的批次會在追蹤實體清單中顯示接近到期徽章，使用**到期前多少天提出警告**所設定的提前天數。

## 更正日期

請對追蹤實體使用效期編輯動作（**編輯效期**）來設定新日期。必須提供原因，並記錄在該實體的歷程中。只有現存庫存可接受更正：**已消耗**實體的日期屬於歷史記錄，維持原樣。

## 各項設定的位置

| 設定 | 位置 |
| - | - |
| 各品項的政策（模式、天數、觸發製程、時機） | 品項的**揀料方法**，位於其保存期限欄位下。 |
| 過期實體政策、接近到期天數、預設天數、計算輸入範圍 | **設定 → 庫存**，**保存期限**卡片。 |
| 一次性的日期更正 | 追蹤實體上的效期編輯動作（需提供原因）。 |

## 疑難排解

| 症狀 | 原因 | 解決方式 |
| - | - | - |
| 發料或調撥時出現 *"Cannot consume expired tracked entity"* | 政策為 **Block**，且批次已超過日期。 | 改選未過期的批次、附原因更正日期，或變更**使用過期庫存時**。 |
| *"Cannot post shipment with expired batch"* | 出貨明細分配了過期的批次。 | 分配其他批次、修正日期，或將規則放寬為 Warn。 |
| 揀料方法上沒有保存期限欄位 | 該品項不是序號或批次追蹤。 | 若品項應該有效期，請變更其追蹤類型。 |
| *"No BOM input has a shelf-life policy"* | 計算模式（或依 BOM 計算）下沒有任何有日期的輸入。 | 為元件設定保存期限政策，或使用不含 BOM 上限的固定期限。 |

## 相關內容

**追溯性**

追蹤有日期的批次或序號，涵蓋收貨、工單與出貨。

[Open](https://docs.alforse.com/zh-Hant/docs/reference/traceability.md)

**庫存**

庫存的所在位置，以及其異動如何記錄。

[Open](https://docs.alforse.com/zh-Hant/docs/reference/inventory.md)

**品項**

設定讓品項符合保存期限資格的追蹤類型。

[Open](https://docs.alforse.com/zh-Hant/docs/reference/items.md)

**儲存規則**

以規則而非日期來管控庫存異動。

[Open](https://docs.alforse.com/zh-Hant/docs/reference/storage-rules.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.