Files
medicus/MedicusWithClaude/CLAUDE_NOTES.md

5.4 KiB
Raw Blame History

MedicusWithClaude poznámky pro Clauda

Stav projektu

  • Zahájeno: 2026-03-13
  • Cíl: průzkum Firebird DB Medicus → analýzy a reporty
  • Zatím: úspěšně čteme i zapisujeme do DB, rozumíme RTF formátu

Bezpečnost

  • Pracujeme na místní kopii poškození DB nevadí, obnova = 5 minut
  • Lze bez obav experimentovat, zapisovat testovací data atd.
  • Testovací záznamy nemusíme mazat

Připojení k DB

import fdb
conn = fdb.connect(
    dsn=r'localhost:c:\medicus 3\data\medicus.fdb',
    user='SYSDBA',
    password='masterkey',
    charset='win1250'
)
  • fdb verze 2.0.4, Python na PATH (prostý python příkaz)

O Medicusu

  • Lékařský software pro praktického lékaře
  • Vyvíjen od ~roku 2000, organicky rostl přidáváním funkcí
  • Firebird 2.5 nikdy nepřejdou na nový (desetitisíce instalací, 993 tabulek)
  • Žádné zabezpečení DB vše čitelné přes SYSDBA/masterkey
  • Charset: win1250

DB fakta

  • 993 tabulek celkem
  • Charset: win1250

Klíčové tabulky

KAR Kartotéka (základní kámen Medicusu)

  • 6319 pacientů všichni kdo kdy prošli ordinací
  • Primární klíč: IDPAC (interní ID, používá se jako FK v ostatních tabulkách)
  • Identifikace pacienta v ČR/pojišťovna: RODCIS (rodné číslo, bez lomítka, např. 7309208104)
  • PRIJMENI, JMENO, TITUL, TITULZA, DATNAR, POHLAVI
  • POJ pojišťovna (3 znaky, např. 111 = VZP)
  • Adresy: TRV* (trvalé), PRE* (přechodné)
  • VYRAZEN příznak vyřazeného pacienta
  • HLAVDGN hlavní diagnóza

DEKURS záznamy z návštěv

  • 172 068 záznamů
  • IDPAC → vazba na KAR
  • DATUM (date), CAS (time) kdy
  • DEKURS text záznamu (BLOB, RTF nebo holý text)
  • DGN1 hlavní diagnóza (5 znaků, např. 'Z000 '), VDGN1-4 vedlejší
  • IDPRAC který pracovník
  • IDODD, IDUZI oddělení/uživatel (u Buzalky = 2, 2, 6)
  • IDSKUPINA, IDTYP volitelné (NULL OK)

Základní schéma

KAR (kartotéka) ←IDPAC→ DEKURS (záznamy z návštěv)

Testovací pacient (uživatel)

  • IDPAC = 9742 Buzalka Vladimír, RC 7309208104, nar. 20.9.1973
  • IDODD=2, IDPRAC=2, IDUZI=6 (použít při INSERT do DEKURS)

RTF formát v DEKURS

Základní struktura

{\rtf1\ansi\ansicpg1250\uc1\deff0\deflang1029
  {\info{\bookmarks "popis","Typ:ID",číslo}}   ← metadata Medicusu
  {\fonttbl{\f0\fnil\fcharset238 Arial;}{\f2...Courier New;}{\f5...Symbol;}}
  {\colortbl ;\red0\green0\blue255;\red255\green255\blue0;\red0\green128\blue0;\red192\green192\blue192;}
  {\stylesheet{styly...}}
\uc1\pard\s10\plain...  ← tělo záznamu
}

Barvy (\cfX)

  • \cf1 = modrá (odkazy)
  • \cf2 = žlutá (highlight)
  • \cf3 = zelená
  • \cf4 = šedá (pozadí buněk tabulky \clcbpat4)

Velikost písma (\fsXX = XX/2 bodů)

  • \fs18 = 9pt (tabulky)
  • \fs20 = 10pt (normální)
  • \fs24 = 12pt atd.

Řezy a formátování

  • \b = tučné, \i = kurzíva, \ul = podtržené
  • \ql = vlevo, \qr = vpravo, \qc = střed

Styly (stylesheet)

  • cs15/cs16 = Normální
  • cs20 = Vkládaný text
  • cs21 = Záhlaví (italic)
  • cs22/cs23 = Odkaz (underline, modrá)
  • s8/s10 = Vlevo (paragraph styl)

Záložky (bookmarks v {\info})

  • Klikatelné odkazy v Medicusu
  • Formát: "popis","Typ:ID",číslo
  • Typy: Files:ID, MEDLAB:ID, Lab:ID, Ock:ID, VykA:ID

České znaky

  • RTF hex escape v win1250: \'e1=á, \'9e=ž, \'fd=ý atd.

Tabulky

  • Plně funkční RTF tabulky (\trowd, \cell, \cellx...)
  • Používají se např. pro laboratorní výsledky (viz ID=243082, 50KB)

Holý text (starší záznamy)

  • Některé starší záznamy jsou prostý text bez RTF obálky
  • Nutno detekovat: začíná na {\\rtf = RTF, jinak plain text

Příklad minimálního RTF záznamu

{\rtf1\ansi\ansicpg1250\uc1\deff0\deflang1029
{\fonttbl{\f0\fnil\fcharset238 Arial;}}
{\colortbl ;\red0\green0\blue255;\red0\green128\blue0;\red0\green0\blue0;}
\pard\plain\f0\fs20 Text záznamu zde\par
}

INSERT do DEKURS ověřený postup

import fdb, datetime

conn = fdb.connect(...)
cur = conn.cursor()

cur.execute('SELECT MAX(ID) FROM DEKURS')
next_id = cur.fetchone()[0] + 1

text = r'{\rtf1\ansi\ansicpg1250...\par' + '\n}'  # raw string pro RTF!

cur.execute("""
    INSERT INTO DEKURS (ID, IDPAC, IDODD, IDPRAC, IDUZI, DATUM, CAS, DEKURS, DGN1)
    VALUES (?, ?, 2, 2, 6, ?, ?, ?, ?)
""", (next_id, idpac, datum, cas, text, dgn1))

conn.commit()
  • RTF string musí být raw string (r'...') kvůli zpětným lomítkům
  • DGN1 = 5 znaků s mezerou: 'Z000 '
  • DATUM = datetime.date(...), CAS = datetime.time(...)

Soubory v projektu

  • explore_db.py výpis všech tabulek a jejich sloupců
  • inspect_table.py detailní info o konkrétní tabulce (arg: název tabulky)
  • sample_dekurs.py ukázky nejstarších a nejnovějších záznamů
  • sample_dekurs2.py celý text jednoho záznamu
  • sample_rtf.py nejdelší záznamy pacienta (dle délky RTF)
  • analyze_rtf.py analýza RTF tagů v záznamu
  • insert_test.py testovací INSERT do DEKURS
  • CLAUDE_NOTES.md tento soubor

Další postup (nápady)

  • Napsat rtf_to_text() pro extrakci čistého textu z dekurzů
  • Prozkoumat tabulky: LECH/LECD (léky?), POU (poukazy?), AMBULEKY (výkony?)
  • První report domluvit s uživatelem co chce vidět