Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.4 KiB
test_import_FINAL.py – detailní dokumentace
Co skript dělá
Importuje PDF soubory (lékařské zprávy) do Medicus DB. Konkrétně:
- Uloží fyzický soubor do externí Firebird DB (tabulka FILES)
- Vloží nebo aktualizuje dekurs pacienta (tabulka DEKURS) s klikacím RTF odkazem na soubor
Vstupní data (konfigurace nahoře)
CESTA = r'u:\\' # adresář se zdrojovými PDF soubory
IDPAC = 9742 # ID pacienta v DB
DATUM = datetime.date(2026, 3, 18) # datum zprávy (ne dnešek!)
SOUBORY = [
{
'souborname': 'název souboru.pdf',
'prvnizavorka': 'typ zprávy', # např. "vyšetření"
'druhazavorka': 'poznámka', # volný text
'datum': DATUM,
},
...
]
Pozor: DATUM je datum zprávy (ne dnešek). Podle tohoto data se hledá existující dekurs.
Rozhodovací logika – 3 scénáře
Poslední dekurs pacienta
│
├─ z JINÉHO dne / neexistuje
│ └─→ SCÉNÁŘ 3: vytvoří nový dekurs
│
└─ z DNEŠNÍHO dne (= DATUM)
│
├─ MÁ sekci "Vložené přílohy"
│ └─→ SCÉNÁŘ 1: přidá odkaz DO existující sekce
│
└─ NEMÁ sekci "Vložené přílohy"
└─→ SCÉNÁŘ 2: prepend nové sekce na začátek
Klíčová funkce pro detekci: ma_sekci_prilohy(rtf) – hledá RTF string Vlo\'9een\'e9 p\'f8\'edlohy: (= „Vložené přílohy:" zakódováno win1250).
Krok 1 – uložení souboru do ext DB
Volá funkce_ext.zapis_file_ext(...) pro každý soubor. Vrátí fileid (ID záznamu v tabulce FILES).
Z každého souboru se postaví:
- bookmark entry pro
{\info{\bookmarks ...}}blok RTF:"2026-03-18 vyšetření: poznámka","Files:1234",9 - RTF pard (klikací odkaz) pro tělo dekurzu:
\pard\s10{\*\bkmkstart 0}\plain\cs32\f0\ul\fs20\cf1 2026-03-18 vyšetření: poznámka{\*\bkmkend 0}\par
Číslo cislo začíná na 9 a roste po 7 (interní Medicus konvence). Index poradi (bkmkstart) začíná na 0 a roste po 1.
Krok 2 – práce s dekurzem
Scénář 1: přidání DO existující sekce (pridat_do_sekce_prilohy)
Situace: dnešní dekurs již má blok „Vložené přílohy" s nějakými odkazy.
Postup:
- Spočítá počet existujících
Files:odkazů v{\info{\bookmarks}}→ to je index nového (new_idx) - Posune všechny
\bkmkstart N/\bkmkend NkdeN >= new_idxo +1 (uvolní místo) - Vloží nový
\pardřádek před uzavírací\pard\s10\plain\cs15\f0\fs20 \parsekce - Vloží nový bookmark na pozici
new_idxv{\info{\bookmarks}}
Výsledek: soubor se přidá na konec existujícího seznamu příloh, indexy zůstanou konzistentní.
Scénář 2: prepend nové sekce (merge_rtf_prepend)
Situace: dnešní dekurs existuje, ale ještě nemá blok příloh.
Postup:
- Posune všechny existující
\bkmkstart N/\bkmkend No +n_new (počet nových souborů) - Přidá nové bookmarky na začátek
{\info{\bookmarks}}bloku- Pokud
{\info{\bookmarks}}neexistuje, vloží ho za\deflang1029
- Pokud
- Vloží nové tělo (záhlaví „Vložené přílohy:" + řádky s odkazy) před první
\uc1\pardtěla stávajícího dekurzu
Výsledek: sekce příloh je viditelně nahoře, stávající text dekurzu zůstane pod ní.
Scénář 3: nový dekurs
Situace: žádný dnešní dekurs neexistuje.
Sestaví RTF šablonu s:
{\info{\bookmarks ...}}– všechny bookmarky- záhlaví „Vložené přílohy:" + klikací řádky
- uzavírací prázdný řádek
Vloží jako nový řádek do tabulky DEKURS s iduzi=6, idprac=2, idodd=2 (Vladimír Buzalka, ordinace).
RTF formát dekurzu
{\rtf1\ansi\ansicpg1250\uc1\deff0\deflang1029
{\info{\bookmarks "2026-03-18 vyšetření: poznámka","Files:1234",9}}
{\fonttbl{\f0\fnil\fcharset238 Arial;} ...}
{\colortbl ;\red0\green0\blue255; ...}
{\stylesheet ... {\*\cs32\f0\ul\fs20\cf1 Odkaz;}}
\uc1\pard\s10\plain\cs20\f0\i\fs20 Vložené přílohy:\par
\pard\s10{\*\bkmkstart 0}\plain\cs32\f0\ul\fs20\cf1 2026-03-18 vyšetření: poznámka{\*\bkmkend 0}\par
\pard\s10\plain\cs15\f0\fs20 \par
}
- cs20 = kurzíva (záhlaví sekce)
- cs32 = podtržený modrý text (klikací odkaz)
- cs15 = normální text
\cf1= modrá barva (první v colortbl)
Závislosti
| Import | Odkud | Co dělá |
|---|---|---|
funkce_ext.zapis_file_ext |
funkce_ext.py |
Uloží soubor do ext DB (tabulka FILES), vrátí fileid |
funkce.get_dekurs_id |
funkce.py |
Vrátí nové ID pro INSERT do tabulky DEKURS |
fdb |
pip | Připojení k Firebird DB |
Tabulky v DB
| Tabulka | DB | Popis |
|---|---|---|
DEKURS |
hlavní (medicus.fdb) |
Záznamy dekurzu, pole DEKURS obsahuje RTF text |
FILES |
ext DB (MEDICUS_FILES_*.fdb) |
Binární obsah souborů |
Jak spustit
Skript se spouští jednorázově na Windows stroji s přístupem k Firebird DB. Před spuštěním:
- Upravit
SOUBORY– seznam PDF souborů ke zpracování - Zkontrolovat
IDPAC,DATUM,CESTA - Ověřit, že PDF soubory fyzicky existují na
CESTA
Po spuštění ověřit v Medicus: karta pacienta → záložka Dekurzy → kliknout na odkaz.