diff --git a/MedicusWithClaude/test_import_FINAL_notes.md b/MedicusWithClaude/test_import_FINAL_notes.md new file mode 100644 index 0000000..af8bc5c --- /dev/null +++ b/MedicusWithClaude/test_import_FINAL_notes.md @@ -0,0 +1,156 @@ +# 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.