## 低阻配對讀數：紀錄與計算

用 `blank-readings.csv` 保留實際讀數與量測背景，將 `FILL_REAL_ID` 換成樣件標識。`demo-readings.csv` 三行均為自擬演示，不是 MTTJ 實測或驗收樣件。`kelvin_pair_calc.py` 依每組有符號電流、電壓求電阻及偏置。

Python 程式僅用標準函式庫，離線執行，無須安裝其他套件。它不控制儀器、不核驗乾電路設定，也不判產品合格。依正文分別確認量測假設與適用產品規範。

## 16 個輸入欄位

保留欄位名稱。程式只用四個有符號讀數欄位計算，其餘欄位作為背景原樣保留，不檢查其值。

| 欄位 | 含義及單位 |
| --- | --- |
| `sample_id` | 該行對應的樣件標識 |
| `sample_state` | 量測時的樣件狀態 |
| `spec_revision` | 本次採用的產品規範版本 |
| `sense_A_B_drawing_ref` | 標示 A/B 感測位置的圖紙引用 |
| `fixture_id` | 所用夾具標識 |
| `method` | 紀錄的量測方法；模板使用 `four_wire_current_pair` |
| `range` | 儀器量程 |
| `source_limit_mV` | 紀錄的源電壓限制，單位 mV |
| `sample_history` | 樣件歷史，含先前機械、環境或電氣試驗 |
| `i_plus_mA` | 正向讀數的有符號實測電流，單位 mA；須大於 0 才能計算 |
| `i_minus_mA` | 反向讀數的有符號實測電流，單位 mA；須小於 0 才能計算 |
| `v_plus_uV` | 與 `i_plus_mA` 配對的有符號感測電壓，單位 μV |
| `v_minus_uV` | 與 `i_minus_mA` 配對的有符號感測電壓，單位 μV |
| `sampled_plus_at` | 正向讀數採樣時間，按文字紀錄保留 |
| `sampled_minus_at` | 反向讀數採樣時間，按文字紀錄保留 |
| `note` | 與原始行一併保留的備註 |

電流與電壓都保留符號。零電壓是數值讀數，空值則是缺測，須保持為空。四個讀數欄位中任何一個缺失、為空或只有空白字元，程式都不以零代入。背景欄位的空值也保持為空。

## 計算與四個輸出欄位

每組完整有效配對使用：

`R = (V+ − V−) / (I+ − I−)`

`E = V+ − I+ R`

第二式由 `V = IR + E` 求偏置。輸入為 μV、mA 時，`R` 為 mΩ，`E` 為 μV。假設電阻線性且配對期間偏置穩定；產生結果不表示已檢驗假設。數值最多保留 12 位有效數字。

| 輸出欄位 | 含義 |
| --- | --- |
| `r_pair_mohm` | 配對電阻，單位 mΩ；缺測或無效時為空 |
| `offset_pair_uV` | 配對偏置，單位 μV；缺測或無效時為空 |
| `calculation_status` | 計算狀態：`calculated`、`missing` 或 `invalid` |
| `calculation_note` | 狀態與計算假設的說明 |

| 狀態標記 | 寫入條件 |
| --- | --- |
| `calculated` | 四個輸入均為有限數、正電流大於 0、負電流小於 0，且兩個輸出均為有限數。原樣備註 `Assumes a linear resistor and stable offset. No acceptance judgment.` 表示假設電阻線性且偏置穩定，不作驗收判斷。 |
| `missing` | 至少一個讀數欄位缺失或為空，兩個數值輸出為空。原樣備註 `Missing readings; no zero imputation.` 表示讀數缺失，不以零補值。 |
| `invalid` | 輸入不是數值或不是有限數、電流符號不符合條件，或計算輸出不是有限數。兩個數值輸出為空，備註指出原因。 |

無效時的原樣備註是 `Readings must be numeric.`、`Require finite readings and Iplus>0, Iminus<0.` 或 `Non-finite calculated output.`，分別表示讀數須為數值、讀數須有限且符合正負電流條件、計算輸出不是有限數。狀態與備註只描述計算處理，不是產品驗收結果。

## 閱讀自擬演示

| 演示行 | I+ / I− (mA) | V+ / V− (μV) | `r_pair_mohm` (mΩ) | `offset_pair_uV` (μV) | `calculation_status` |
| --- | --- | --- | ---: | ---: | --- |
| `DEMO_STABLE` | +10 / −10 | +110 / −90 | 10 | 10 | `calculated` |
| `DEMO_DRIFT` | +10 / −10 | +110 / −86 | 9.8 | 12 | `calculated` |
| `DEMO_UNEQUAL` | +12 / −8 | +130 / −70 | 10 | 10 | `calculated` |

漂移演示在兩次讀數間將假設偏置從 10 改為 14 μV，配對得 9.8 mΩ、12 μV。`calculated` 不檢測或消除漂移。電流大小不同的演示用實際有符號值 +12、−8 mA，得 10 mΩ。空白模板保留缺測讀數時，兩個數值輸出也為空，狀態為 `missing`。

## 離線執行並保留輸入

將程式和所選 CSV 保存在本機，執行 `python kelvin_pair_calc.py demo-readings.csv result.csv`。實際讀數以填妥的空白模板作輸入，另選輸出檔案。輸入與輸出解析為同一路徑時，程式拒絕執行，保留原始輸入。

輸出保留輸入欄位並追加四個計算欄位。若輸入已有四個同名輸出欄位，程式以新計算值取代。結果寫為帶位元組順序標記的 UTF-8 CSV。缺測仍為空值，不作合格或不合格判斷。
