## Záznam a výpočet dvojic hodnot malého odporu

V `blank-readings.csv` uchovejte skutečné údaje a kontext; nahraďte `FILL_REAL_ID` identifikátorem. Tři řádky `demo-readings.csv` jsou smyšlené, ne měření MTTJ či přejímací vzorky. `kelvin_pair_calc.py` počítá odpor a offset dvojic proudů a napětí se znaménkem.

Python běží offline jen se standardní knihovnou, bez dalších balíčků. Neřídí přístroj, neověřuje suchý obvod ani nerozhoduje o přejímce. Ověřte předpoklady a specifikaci zvlášť podle článku.

## 16 vstupních sloupců

Názvy zachovejte. Skript počítá ze čtyř měřicích sloupců; ostatní uchovává jako kontext bez kontroly hodnot.

| Sloupec | Význam a jednotka |
| --- | --- |
| `sample_id` | Identifikátor vzorku řádku |
| `sample_state` | Stav při měření |
| `spec_revision` | Revize použité specifikace |
| `sense_A_B_drawing_ref` | Odkaz na nákres Sense A/B |
| `fixture_id` | Identifikátor přípravku |
| `method` | Zapsaná metoda; šablony používají `four_wire_current_pair` |
| `range` | Rozsah přístroje |
| `source_limit_mV` | Zapsaný limit napětí zdroje v mV |
| `sample_history` | Historie včetně mechanických, environmentálních či elektrických zkoušek |
| `i_plus_mA` | Změřený kladný proud se znaménkem v mA; větší než 0 pro výpočet |
| `i_minus_mA` | Změřený záporný proud se znaménkem v mA; menší než 0 pro výpočet |
| `v_plus_uV` | Snímané napětí se znaménkem k `i_plus_mA`, v μV |
| `v_minus_uV` | Snímané napětí se znaménkem k `i_minus_mA`, v μV |
| `sampled_plus_at` | Čas kladného odečtu, uchovaný jako text |
| `sampled_minus_at` | Čas záporného odečtu, uchovaný jako text |
| `note` | Poznámky původního řádku |

Zachovejte znaménka. Nulové napětí je číslo; prázdný údaj je chybějící a zůstane prázdný. Neexistující pole, prázdné pole či pouze bílé znaky v kterémkoli ze čtyř polí se nenahradí nulou. Prázdný kontext zůstává prázdný.

## Výpočet a čtyři výstupy

Každá úplná platná dvojice používá:

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

`E = V+ − I+ R`

Druhý vzorec určuje offset z `V = IR + E`. μV a mA dávají `R` v mΩ a `E` v μV. Předpokládá linearitu a stabilní offset během dvojice; výsledek je neověřuje. Výstupy mají až 12 platných číslic.

| Výstup | Význam |
| --- | --- |
| `r_pair_mohm` | Odpor v mΩ; prázdný pro chybějící či neplatnou dvojici |
| `offset_pair_uV` | Offset v μV; prázdný pro chybějící či neplatnou dvojici |
| `calculation_status` | Stav `calculated`, `missing` nebo `invalid` |
| `calculation_note` | Vysvětlení stavu a předpokladů |

| Stav | Kdy se zapíše |
| --- | --- |
| `calculated` | Čtyři konečná čísla, kladný proud větší než 0, záporný menší než 0 a konečné výstupy. Doslovný text `Assumes a linear resistor and stable offset. No acceptance judgment.` předpokládá linearitu a stabilitu, bez rozhodnutí o přejímce. |
| `missing` | Chybějící či prázdný odečet; oba číselné výstupy prázdné. `Missing readings; no zero imputation.` znamená chybějící údaje bez dosazení nuly. |
| `invalid` | Nečíselný či ne-konečný vstup, nesprávná znaménka nebo ne-konečný výstup. Číselné výstupy prázdné, poznámka uvádí důvod. |

Doslovné poznámky jsou `Readings must be numeric.`, `Require finite readings and Iplus>0, Iminus<0.` nebo `Non-finite calculated output.` Požadují čísla, konečné hodnoty a daná znaménka, nebo hlásí ne-konečný výsledek. Stavy se týkají výpočtu, ne přejímky.

## Čtěte smyšlené příklady

| Řádek | 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` |

Drift mění předpokládaný offset z 10 na 14 μV a dává 9.8 mΩ a 12 μV. `calculated` drift nezjišťuje ani neodstraňuje. Příklad s nestejnými proudy +12 a −8 mA dává 10 mΩ. Prázdné odečty nechají dva prázdné výstupy a stav `missing`.

## Spusťte offline a zachovejte vstup

S místními soubory spusťte `python kelvin_pair_calc.py demo-readings.csv result.csv`. Pro skutečné údaje použijte vyplněnou šablonu a jiný výstup. Skript odmítá vstup a výstup vyhodnocené na stejnou cestu, aby zachoval originál.

Uchová vstupní sloupce a přidá čtyři vypočtené. Existují-li již stejné názvy, nahradí je novými výsledky. Píše UTF-8 CSV se značkou pořadí bajtů. Chybějící hodnoty zůstávají prázdné, bez vyhovuje/nevyhovuje.
