# test_import_FINAL.py – detailní dokumentace ## Co skript dělá Importuje PDF soubory (lékařské zprávy) do Medicus DB. Konkrétně: 1. Uloží fyzický soubor do **externí Firebird DB** (tabulka FILES) 2. Vloží nebo aktualizuje **dekurs pacienta** (tabulka DEKURS) s klikacím RTF odkazem na soubor --- ## Vstupní data (konfigurace nahoře) ```python 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: 1. Spočítá počet existujících `Files:` odkazů v `{\info{\bookmarks}}` → to je index nového (`new_idx`) 2. Posune všechny `\bkmkstart N` / `\bkmkend N` kde `N >= new_idx` o +1 (uvolní místo) 3. Vloží nový `\pard` řádek **před** uzavírací `\pard\s10\plain\cs15\f0\fs20 \par` sekce 4. Vloží nový bookmark na pozici `new_idx` v `{\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: 1. Posune všechny existující `\bkmkstart N` / `\bkmkend N` o +n_new (počet nových souborů) 2. Přidá nové bookmarky **na začátek** `{\info{\bookmarks}}` bloku - Pokud `{\info{\bookmarks}}` neexistuje, vloží ho za `\deflang1029` 3. Vloží nové tělo (záhlaví „Vložené přílohy:" + řádky s odkazy) **před** první `\uc1\pard` tě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 ```rtf {\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: 1. Upravit `SOUBORY` – seznam PDF souborů ke zpracování 2. Zkontrolovat `IDPAC`, `DATUM`, `CESTA` 3. 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.