Files
reporty/PSA/01 PSA.md
T
2026-04-08 20:56:26 +02:00

7.1 KiB
Raw Blame History

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 na 192.168.1.10, databáze m:\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 0113001134), 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

  1. SQL subquery najde MAX(datose) z dokladd kde kod = '01130' a datose < datum PSA — tedy poslední vykázání PSA před tímto odběrem.
  2. Python pak k tomuto datu dohledá kódy 01131, 01132, 01133 vyká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