# 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.
