Files
medicus/MedicusWithClaude/test_import_FINAL_notes.md
2026-04-03 08:53:59 +02:00

5.4 KiB
Raw Permalink Blame History

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)

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

{\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.