## Ghi và tính các cặp số đọc điện trở thấp

Giữ số đọc đo thực tế và bối cảnh trong `blank-readings.csv`, thay `FILL_REAL_ID` bằng mã mẫu. Ba hàng `demo-readings.csv` là tự đặt, không phải kết quả đo của MTTJ hay mẫu nghiệm thu. `kelvin_pair_calc.py` tính điện trở và độ lệch từ cặp dòng, điện áp có dấu.

Python chạy ngoại tuyến chỉ với thư viện chuẩn, không cần gói khác. Không điều khiển máy, kiểm chứng mạch khô hay đưa ra quyết định nghiệm thu. Xác nhận giả thiết và quy định riêng theo bài.

## 16 cột đầu vào

Giữ tên. Mã tính từ bốn cột số đọc; cột khác giữ bối cảnh, không kiểm tra giá trị.

| Cột | Nghĩa và đơn vị |
| --- | --- |
| `sample_id` | Mã mẫu của hàng |
| `sample_state` | Trạng thái khi đo |
| `spec_revision` | Phiên bản quy định dùng |
| `sense_A_B_drawing_ref` | Tham chiếu sơ đồ Sense A/B |
| `fixture_id` | Mã đồ gá |
| `method` | Phương pháp ghi; mẫu dùng `four_wire_current_pair` |
| `range` | Thang đo của thiết bị |
| `source_limit_mV` | Giới hạn điện áp nguồn đã ghi, mV |
| `sample_history` | Lịch sử, gồm thử cơ học, môi trường hay điện trước đó |
| `i_plus_mA` | Dòng dương đo có dấu, mA; lớn hơn 0 để tính |
| `i_minus_mA` | Dòng âm đo có dấu, mA; nhỏ hơn 0 để tính |
| `v_plus_uV` | Điện áp cảm nhận có dấu cặp với `i_plus_mA`, μV |
| `v_minus_uV` | Điện áp cảm nhận có dấu cặp với `i_minus_mA`, μV |
| `sampled_plus_at` | Thời gian đọc dương, giữ dạng chữ |
| `sampled_minus_at` | Thời gian đọc âm, giữ dạng chữ |
| `note` | Ghi chú giữ cùng hàng gốc |

Giữ dấu. Điện áp bằng không là số; rỗng là thiếu và giữ rỗng. Trường vắng, rỗng hay chỉ khoảng trắng ở bất kỳ bốn số đọc nào không được thay bằng không. Bối cảnh rỗng cũng giữ rỗng.

## Tính và bốn cột ra

Mỗi cặp đủ và hợp lệ dùng:

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

`E = V+ − I+ R`

Công thức hai lấy độ lệch từ `V = IR + E`. μV, mA cho `R` mΩ, `E` μV. Giả thiết tuyến tính và độ lệch ổn định trong cặp; kết quả không xác nhận giả thiết. Đầu ra tối đa 12 chữ số có nghĩa.

| Đầu ra | Nghĩa |
| --- | --- |
| `r_pair_mohm` | Điện trở mΩ; rỗng nếu thiếu hoặc không hợp lệ |
| `offset_pair_uV` | Độ lệch μV; rỗng nếu thiếu hoặc không hợp lệ |
| `calculation_status` | Trạng thái `calculated`, `missing` hay `invalid` |
| `calculation_note` | Giải thích trạng thái và giả thiết |

| Trạng thái | Khi ghi |
| --- | --- |
| `calculated` | Bốn số hữu hạn, dòng dương trên 0, âm dưới 0 và hai kết quả hữu hạn. Nguyên văn `Assumes a linear resistor and stable offset. No acceptance judgment.` giả định tuyến tính và ổn định, không đưa ra quyết định nghiệm thu. |
| `missing` | Số vắng hoặc rỗng; hai đầu ra số rỗng. `Missing readings; no zero imputation.` nghĩa là thiếu, không thay giá trị thiếu bằng 0. |
| `invalid` | Không phải số hoặc không hữu hạn, dấu sai hay kết quả không hữu hạn. Đầu ra số rỗng, chú thích nêu lý do. |

Chú thích gốc: `Readings must be numeric.`, `Require finite readings and Iplus>0, Iminus<0.` hoặc `Non-finite calculated output.` Yêu cầu số, hữu hạn và dấu đúng hoặc báo kết quả không hữu hạn. Trạng thái chỉ tính toán, không nghiệm thu.

## Đọc ví dụ tự đặt

| Hàng | 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` |

Trôi đổi độ lệch giả định 10 tới 14 μV giữa số đọc, cho 9.8 mΩ và 12 μV. `calculated` không phát hiện hay khử trôi. Ví dụ dòng khác nhau +12, −8 mA cho 10 mΩ. Số trống giữ hai đầu ra rỗng với `missing`.

## Chạy ngoại tuyến và giữ đầu vào

Với tệp cục bộ chạy `python kelvin_pair_calc.py demo-readings.csv result.csv`. Dữ liệu đo thực tế dùng mẫu đã điền và tệp ra khác. Mã từ chối đường vào, ra phân giải cùng một đường để giữ gốc.

Giữ cột vào, thêm bốn cột tính. Nếu tên cột ra đã tồn tại, thay bằng kết quả mới. Ghi CSV UTF-8 có dấu thứ tự byte. Thiếu vẫn rỗng, không quyết định đạt/không đạt.
