MedicusWithClaude: detailní poznámky k test_import_FINAL.py
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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.
|
||||||
Reference in New Issue
Block a user