7.1 KiB
01 PSA.py — Dokumentace
Účel
Skript generuje report výsledků PSA (prostatický specifický antigen) z databáze Medicus (Firebird) a exportuje ho do formátovaného Excel souboru. Výsledky jsou barevně označeny podle poměru naměřené hodnoty k horní hranici normy. Skript zároveň sleduje historii vykázání PSA pojišťovně a počítá, kdy by měl být výkon vykázán příště.
Databázové připojení
| Parametr | Hodnota |
|---|---|
| Host | localhost |
| Port | 3050 |
| Databáze | c:\Medicus 3\data\MEDICUS.FDB |
| Uživatel | SYSDBA |
| Heslo | masterkey |
| Kódování | WIN1250 |
Jde o lokální testovací instanci Medicus. Produkční verze (
Reporter PSA.py) se připojuje na192.168.1.10, databázem:\Medicus\data\MEDICUS.FDB.
Výstup
Soubor se ukládá do:
u:\Dropbox\!!!Days\Downloads Z230\
Název souboru: YYYY-MM-DD HH-MM-SS PSA report.xlsx
Před každým spuštěním jsou automaticky smazány všechny starší soubory v této složce, jejichž název končí na PSA report.xlsx.
SQL dotaz — co se táhne z databáze
Dotaz vytáhne všechna PSA měření bez datumového omezení, seřazená od nejnovějšího.
Tabulky
| Tabulka | Alias | Popis |
|---|---|---|
labvh |
vh |
Hlavičky laboratorních vyšetření |
labvd |
vd |
Výsledky laboratorních vyšetření |
kar |
Kartotéka pacientů | |
labmetod |
lm |
Laboratorní metody (název, kód) |
labjedn |
lj |
Jednotky výsledků |
labskaly |
ls |
Referenční rozmezí (normy) |
dokladd |
dd |
Vykázané výkony pojišťovně |
Filtr
WHERE lm.nazev CONTAINING 'PSA'
Bez datumového omezení — bere všechna PSA z celé databáze.
Sloupce ve výsledném Excel souboru
| Sloupec | Zdroj / Popis |
|---|---|
IDPACIENT |
ID pacienta z labvh |
PRIJMENI |
Příjmení z kartotéky |
JMENO |
Jméno z kartotéky |
RODCIS |
Rodné číslo |
DATUM |
Datum odběru PSA |
MINULE |
Datum posledního vykázání kódu 01130 před tímto PSA + vypočtený termín příštího vykázání dle kódů z té návštěvy (viz logika níže) |
VYKODOVANO |
Seznam výkonů vykázaných pojišťovně v okně ±7 dní od data PSA (kódy 01130–01134), formát: "YYYY-MM-DD kod, ..." |
DALŠÍ |
Vypočtený termín příštího vykázání PSA dle kódů v VYKODOVANO (viz logika níže) |
KODTEXT |
Kód laboratorní metody |
NAZEV |
Název laboratorní metody |
VYSL |
Naměřená hodnota (text, např. "5,6", "<0.1") |
JEDN |
Jednotka výsledku |
NORMDOL |
Dolní hranice normy |
NORMHOR |
Horní hranice normy |
VYSL_NUM |
Numerická hodnota z VYSL (pomocný sloupec pro výpočty) |
NORMHOR_NUM |
Numerická hodnota z NORMHOR (pomocný sloupec) |
RATIO |
VYSL_NUM / NORMHOR_NUM — poměr hodnoty k horní normě (základ pro barevné zvýraznění) |
Logika sloupců MINULE a DALŠÍ
Kódy pojišťovny relevantní pro PSA:
| Kód | Význam | Interval opakování |
|---|---|---|
01130 |
Základní vykázání PSA | — |
01131 |
PSA s rozšířeným sledováním (rizikový) | za 4 roky |
01132 |
PSA se středním sledováním | za 2 roky |
01133 |
PSA — jednorázový výkon (bez opakování) | NIKDY |
01134 |
Ostatní / doplňkový kód | — |
Sloupec DALŠÍ
Vypočítá se z kódů nalezených v VYKODOVANO (okno ±7 dní od data PSA):
01133 → "NIKDY"
01131 → datum PSA + 4 roky
01132 → datum PSA + 2 roky
jinak → prázdné
Sloupec MINULE
- SQL subquery najde
MAX(datose)zdokladdkdekod = '01130'adatose < datum PSA— tedy poslední vykázání PSA před tímto odběrem. - Python pak k tomuto datu dohledá kódy
01131,01132,01133vykázané v okně ±7 dní a aplikuje stejnou logiku jako DALŠÍ.
Výsledný formát: "2024-03-15, další 2028-03-15" nebo "2024-03-15, další NIKDY" nebo jen "2024-03-15" (pokud nebyl nalezen žádný rozhodující kód).
Parsování výsledků (funkce to_num)
Hodnoty PSA přicházejí jako text. Funkce to_num extrahuje číslo i z nestandardních zápisů:
| Vstup | Výstup | Poznámka |
|---|---|---|
"5,6" |
5.6 |
česká desetinná čárka |
"<0.1" |
0.05 |
pod mezí detekce → polovina hodnoty |
">100" |
100.0 |
nad rozsahem → použije se hodnota |
"3.2 ng/mL" |
3.2 |
jednotka se ignoruje |
None / "" |
NaN |
prázdné nebo chybějící |
Barevné podmíněné formátování (sloupec VYSL)
Barva se odvíjí od sloupce RATIO (VYSL_NUM / NORMHOR_NUM):
| Barva | Podmínka | Význam |
|---|---|---|
| 🟢 Zelená | RATIO ≤ 0.80 |
V normě |
| 🟡 Žlutá | 0.80 < RATIO < 1.00 |
Hraniční hodnota |
| 🔴 Červená | RATIO ≥ 1.00 |
Nad horní hranicí normy |
Formátování Excel souboru
- Automatická šířka sloupců (max. 50 znaků)
- Tenké ohraničení všech buněk
- Sloupce A, B, E zarovnány na střed
- Zmražení prvního řádku (záhlaví)
- Autofiltr na celý rozsah dat
Závislosti (Python balíčky)
firebirdsql
pandas
numpy
openpyxl
Rozdíl oproti Reporter PSA.py
| Vlastnost | 01 PSA.py (tento) |
Reporter PSA.py |
|---|---|---|
| Host / DB | localhost / c:\Medicus 3\data\MEDICUS.FDB |
192.168.1.10 / m:\Medicus\data\MEDICUS.FDB |
| Výstupní složka | u:\Dropbox\!!!Days\Downloads Z230 |
z:\Dropbox\Ordinace\Reporty |
| Okno pro VYKODOVANO | ±7 dní | ±7 dní |
| Sloupce MINULE / DALŠÍ | ✅ Ano | ❌ Ne |
| Datumové omezení | Žádné (celá databáze) | Žádné (celá databáze) |
Poslední aktualizace dokumentace: 2026-04-08